Форум трейдеров » Торговые роботы, советники, индикаторы » Бесплатное программирование MQL4
+ Подписаться
Страница 22 из 30 ПерваяПервая ... 122021222324 ... ПоследняяПоследняя
  1. 40
    Комментарии
    1
    Темы
    40
    Репутация Pro
     
    Новичок

    2 Медалей
    Цитата Сообщение от ganri Посмотреть сообщение
    :thumbsup_002: Как можно воспользоваться Вашим предложением? Вот мой адрес на всякий случай: diaji mail ru
    Излагайте идею здесь, реализуем!
  2. 2
    Комментарии
    0
    Темы
    2
    Репутация Pro
     
    Новичок

    2 Медалей
    Цитата Сообщение от PAZITIV Посмотреть сообщение
    Выкладывайте ТЗ в этой теме. Если будет время то помогу я :)
    PAZITIV, а подправить советника не поможете? Я лепил его из двух
    советников, но добить ума не хватает. Он иногда выставляет одновременно целую кучу ордеров и не всегда ставит StopLoss. Надо, чтобы выставлял одну сделку за один раз, а не невколько одновременно, и не забывал StopLoss.
    Хотелось бы, что бы он после открытия сделки, несколько свечей текущего таймфрейма не открывал новые сделки и колличество пропущенных свечей можно было бы устанавливать в настройках.
    Даже такой больной, он вобщем то работает согласно ожиданиям. Поэтому и прошу.
    Вложения Вложения
  3. 1,009
    Комментарии
    8
    Темы
    769
    Репутация Pro
    Аватар для PAZITIV  
    В начале пути

    4 Медалей
    Цитата Сообщение от terminat Посмотреть сообщение
    PAZITIV, а подправить советника не поможете? Я лепил его из двух
    советников, но добить ума не хватает. Он иногда выставляет одновременно целую кучу ордеров и не всегда ставит StopLoss. Надо, чтобы выставлял одну сделку за один раз, а не невколько одновременно, и не забывал StopLoss.
    Хотелось бы, что бы он после открытия сделки, несколько свечей текущего таймфрейма не открывал новые сделки и колличество пропущенных свечей можно было бы устанавливать в настройках.
    Даже такой больной, он вобщем то работает согласно ожиданиям. Поэтому и прошу.
    Ковырять чужой код не буду. Тем более, "слепленный". Если нужен советник, то формулируйте ТЗ и пишите в личку. Договоримся. И какой у вас тип исполнения ордеров? Инстант или маркет?
  4. 2
    Комментарии
    0
    Темы
    2
    Репутация Pro
     
    Новичок

    2 Медалей
    Цитата Сообщение от PAZITIV Посмотреть сообщение
    Ковырять чужой код не буду. Тем более, "слепленный". Если нужен советник, то формулируйте ТЗ и пишите в личку. Договоримся. И какой у вас тип исполнения ордеров? Инстант или маркет?
    Инстант. И кода там мало, 3/4 типовой MACD Sample. Никаких модернизаций. Выставил сов ордер и забыл про него. Простой, но слишком много я в него таращился, видно какую то ерунду пропустил.
    Задумывал я его, как внутридневной сигнальщик. Раз открылся, значит что-то на чарте происходит. Сигналить та он сигналит, но из-за его перекосов,
    морочно статистику вести.

    //+------------------------------------------------------------------+
    //| MACD_MOD_Bad .mq4 |
    //| Copyright © 2005, MetaQuotes Software Corp. |
    //| |
    //+------------------------------------------------------------------+

    extern double TakeProfit = 10;
    extern double Lots = 0.1;
    extern double TrailingStop = 20;
    extern double MACDOpenLevel=3;
    extern double MACDCloseLevel=2;
    extern double MATrendPeriod=26;
    extern double StopLoss = 25;
    extern double Per = 14;
    //+------------------------------------------------------------------+
    //| MACD + ATECT |
    //| |
    //| |
    //+------------------------------------------------------------------+
    int start()
    {

    double MacdCurrent, MacdPrevious, SignalCurrent;
    double SignalPrevious, MaCurrent, MaPrevious;
    int cnt, ticket, total;
    double nlots=0.1;
    int ind1=0, ind2=0,shift=0;
    // initial data checks. (первичные проверки данных)
    // variables (Lots, StopLoss, TakeProfit,
    // TrailingStop) in our case, we check TakeProfit
    // on a chart of less than 100 bars
    if(Bars<100)
    {
    Print("bars less than 100");
    return(0);
    }
    if(TakeProfit<10)
    {
    Print("TakeProfit less than 10");
    return(0); // check TakeProfit
    }
    if ( (Minute()!=0) && (Minute()!=15) && (Minute() !=30) && (Minute() !=45)) return;
    if (High[Highest(NULL,0,MODE_HIGH,Per,Per-1)] < High[1])
    {
    ind1 = 1;
    ind2 = 0;
    }
    if (Low[Lowest(NULL,0,MODE_LOW,Per,Per-1)] > Low[1])
    {
    ind2 = 1;
    ind1 = 0;
    }
    if ( (ind1>ind2) && (Ask < Open[0] ) )
    {
    OrderSend(Symbol(),OP_BUY,nlots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,0,0,Blue);
    }
    // to simplify the coding and speed up access
    // data are put into internal variables
    MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_ MAIN,0);
    MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE _MAIN,1);
    SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MOD E_SIGNAL,0);
    SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MO DE_SIGNAL,1);
    MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRIC E_CLOSE,0);
    MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRI CE_CLOSE,1);

    total=OrdersTotal();
    if(total<1)
    {
    // no opened orders identified
    if(AccountFreeMargin()<(1000*Lots))
    {
    Print("We have no money. Free Margin = ", AccountFreeMargin());
    return(0);
    }
    // check for long position (BUY) possibility
    if(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious &&
    MathAbs(MacdCurrent)>(MACDOpenLevel*Point) && MaCurrent>MaPrevious)
    {
    ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+ TakeProfit*Point,"macd sample",16384,0,Green);
    if(ticket>0)
    {
    if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES )) Print("BUY order opened : ",OrderOpenPrice());
    }
    else Print("Error opening BUY order : ",GetLastError());
    return(0);
    }
    // check for short position (SELL) possibility
    if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&
    MacdCurrent>(MACDOpenLevel*Point) && MaCurrent<MaPrevious)
    {
    ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"macd sample",16384,0,Red);
    if(ticket>0)
    {
    if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES )) Print("SELL order opened : ",OrderOpenPrice());
    }
    else Print("Error opening SELL order : ",GetLastError());
    return(0);
    }
    return(0);
    }
    // it is important to enter the market correctly,
    // but it is more important to exit it correctly...
    for(cnt=0;cnt<total;cnt++)
    {
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    if(OrderType()<=OP_SELL && // check for opened position
    OrderSymbol()==Symbol()) // check for symbol
    {
    if(OrderType()==OP_BUY) // long position is opened
    {
    // should it be closed?
    if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&
    MacdCurrent>(MACDCloseLevel*Point))
    {
    OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet) ; // close position
    return(0); // exit
    }
    // check for trailing stop
    if(TrailingStop>0)
    {
    if(Bid-OrderOpenPrice()>Point*TrailingStop)
    {
    if(OrderStopLoss()<Bid-Point*TrailingStop)
    {
    OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
    return(0);
    }
    }
    }
    }
    else // go to short position
    {
    // should it be closed?
    if(MacdCurrent<0 && MacdCurrent>SignalCurrent &&
    MacdPrevious<SignalPrevious && MathAbs(MacdCurrent)>(MACDCloseLevel*Point))
    {
    OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet) ; // close position
    return(0); // exit
    }
    // check for trailing stop
    if(TrailingStop>0)
    {
    if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
    {
    if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
    {
    OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Poi nt*TrailingStop,OrderTakeProfit(),0,Red);
    return(0);
    }
    }
    }
    }
    }
    }
    return(0);
    }
    //the end


    Вот пример: В тесте с сентября по ноябрь:
    М 15 EURUSD
    7619 653 1.87 11.67 2217 39.19% TakeProfit=60 TrailingStop=0 MACDOpenLevel=0 MACDCloseLevel=6 MATrendPeriod=9 StopLoss=30 Per=137 Lots=0.1

    За 653 сделки, прибыльность 1.87 не плохо. Но, так ли это , или он слишком много пересидел без стопа? Надо просмотреть каждую сделку, чтобы разобраться.
  5. 1,009
    Комментарии
    8
    Темы
    769
    Репутация Pro
    Аватар для PAZITIV  
    В начале пути

    4 Медалей
    Цитата Сообщение от terminat Посмотреть сообщение
    Инстант. И кода там мало, 3/4 типовой MACD Sample. Никаких модернизаций. Выставил сов ордер и забыл про него. Простой, но слишком много я в него таращился, видно какую то ерунду пропустил.
    Задумывал я его, как внутридневной сигнальщик. Раз открылся, значит что-то на чарте происходит. Сигналить та он сигналит, но из-за его перекосов,
    морочно статистику вести.

    //+------------------------------------------------------------------+
    //| MACD_MOD_Bad .mq4 |
    //| Copyright © 2005, MetaQuotes Software Corp. |
    //| |
    //+------------------------------------------------------------------+

    extern double TakeProfit = 10;
    extern double Lots = 0.1;
    extern double TrailingStop = 20;
    extern double MACDOpenLevel=3;
    extern double MACDCloseLevel=2;
    extern double MATrendPeriod=26;
    extern double StopLoss = 25;
    extern double Per = 14;
    //+------------------------------------------------------------------+
    //| MACD + ATECT |
    //| |
    //| |
    //+------------------------------------------------------------------+
    int start()
    {

    double MacdCurrent, MacdPrevious, SignalCurrent;
    double SignalPrevious, MaCurrent, MaPrevious;
    int cnt, ticket, total;
    double nlots=0.1;
    int ind1=0, ind2=0,shift=0;
    // initial data checks. (первичные проверки данных)
    // variables (Lots, StopLoss, TakeProfit,
    // TrailingStop) in our case, we check TakeProfit
    // on a chart of less than 100 bars
    if(Bars<100)
    {
    Print("bars less than 100");
    return(0);
    }
    if(TakeProfit<10)
    {
    Print("TakeProfit less than 10");
    return(0); // check TakeProfit
    }
    if ( (Minute()!=0) && (Minute()!=15) && (Minute() !=30) && (Minute() !=45)) return;
    if (High[Highest(NULL,0,MODE_HIGH,Per,Per-1)] < High[1])
    {
    ind1 = 1;
    ind2 = 0;
    }
    if (Low[Lowest(NULL,0,MODE_LOW,Per,Per-1)] > Low[1])
    {
    ind2 = 1;
    ind1 = 0;
    }
    if ( (ind1>ind2) && (Ask < Open[0] ) )
    {
    OrderSend(Symbol(),OP_BUY,nlots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,0,0,Blue);
    }
    // to simplify the coding and speed up access
    // data are put into internal variables
    MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_ MAIN,0);
    MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE _MAIN,1);
    SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MOD E_SIGNAL,0);
    SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MO DE_SIGNAL,1);
    MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRIC E_CLOSE,0);
    MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRI CE_CLOSE,1);

    total=OrdersTotal();
    if(total<1)
    {
    // no opened orders identified
    if(AccountFreeMargin()<(1000*Lots))
    {
    Print("We have no money. Free Margin = ", AccountFreeMargin());
    return(0);
    }
    // check for long position (BUY) possibility
    if(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious &&
    MathAbs(MacdCurrent)>(MACDOpenLevel*Point) && MaCurrent>MaPrevious)
    {
    ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+ TakeProfit*Point,"macd sample",16384,0,Green);
    if(ticket>0)
    {
    if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES )) Print("BUY order opened : ",OrderOpenPrice());
    }
    else Print("Error opening BUY order : ",GetLastError());
    return(0);
    }
    // check for short position (SELL) possibility
    if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&
    MacdCurrent>(MACDOpenLevel*Point) && MaCurrent<MaPrevious)
    {
    ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"macd sample",16384,0,Red);
    if(ticket>0)
    {
    if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES )) Print("SELL order opened : ",OrderOpenPrice());
    }
    else Print("Error opening SELL order : ",GetLastError());
    return(0);
    }
    return(0);
    }
    // it is important to enter the market correctly,
    // but it is more important to exit it correctly...
    for(cnt=0;cnt<total;cnt++)
    {
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    if(OrderType()<=OP_SELL && // check for opened position
    OrderSymbol()==Symbol()) // check for symbol
    {
    if(OrderType()==OP_BUY) // long position is opened
    {
    // should it be closed?
    if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&
    MacdCurrent>(MACDCloseLevel*Point))
    {
    OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet) ; // close position
    return(0); // exit
    }
    // check for trailing stop
    if(TrailingStop>0)
    {
    if(Bid-OrderOpenPrice()>Point*TrailingStop)
    {
    if(OrderStopLoss()<Bid-Point*TrailingStop)
    {
    OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
    return(0);
    }
    }
    }
    }
    else // go to short position
    {
    // should it be closed?
    if(MacdCurrent<0 && MacdCurrent>SignalCurrent &&
    MacdPrevious<SignalPrevious && MathAbs(MacdCurrent)>(MACDCloseLevel*Point))
    {
    OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet) ; // close position
    return(0); // exit
    }
    // check for trailing stop
    if(TrailingStop>0)
    {
    if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
    {
    if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
    {
    OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Poi nt*TrailingStop,OrderTakeProfit(),0,Red);
    return(0);
    }
    }
    }
    }
    }
    }
    return(0);
    }
    //the end


    Вот пример: В тесте с сентября по ноябрь:
    М 15 EURUSD
    7619 653 1.87 11.67 2217 39.19% TakeProfit=60 TrailingStop=0 MACDOpenLevel=0 MACDCloseLevel=6 MATrendPeriod=9 StopLoss=30 Per=137 Lots=0.1

    За 653 сделки, прибыльность 1.87 не плохо. Но, так ли это , или он слишком много пересидел без стопа? Надо просмотреть каждую сделку, чтобы разобраться.
    ещё раз говорю. я не буду исправлять ваш код. формулируйте ТЗ -- тогда может возьмусь
  6. 2,682
    Комментарии
    28
    Темы
    2807
    Репутация Pro
    Аватар для sydiya  
    Сурововец

    6 Медалей
    Цитата Сообщение от terminat Посмотреть сообщение
    Инстант. И кода там мало, 3/4 типовой MACD Sample. Никаких модернизаций. Выставил сов ордер и забыл про него. Простой, но слишком много я в него таращился, видно какую то ерунду пропустил.
    ................................
    За 653 сделки, прибыльность 1.87 не плохо. Но, так ли это , или он слишком много пересидел без стопа? Надо просмотреть каждую сделку, чтобы разобраться.
    Терминат, если вы слепили этот советник, то зачем вы комментарии на английском пишите? Вы свободно им владеете?
    И кстати названия переменных можно писать русскими буквами, это у программистов не приветствуется, но эта ветка все таки в том числе для тех, кто делает первые шаги разбирая чужой код.
    И еще. Старайтесь все таки писать отдельными функциями. Функция определения критериев торговли, функция выставления ордеров, функция выставления стоп приказов, ну и так далее, функция трала например. И читабельней будет и готовые куски кода сразу можно ставить в другие советники.
  7. 1,009
    Комментарии
    8
    Темы
    769
    Репутация Pro
    Аватар для PAZITIV  
    В начале пути

    4 Медалей
    Цитата Сообщение от sydiya Посмотреть сообщение
    Терминат, если вы слепили этот советник, то зачем вы комментарии на английском пишите? Вы свободно им владеете?
    И кстати названия переменных можно писать русскими буквами, это у программистов не приветствуется, но эта ветка все таки в том числе для тех, кто делает первые шаги разбирая чужой код.
    И еще. Старайтесь все таки писать отдельными функциями. Функция определения критериев торговли, функция выставления ордеров, функция выставления стоп приказов, ну и так далее, функция трала например. И читабельней будет и готовые куски кода сразу можно ставить в другие советники.
    Вот на счёт функций полностью поддерживаю. Сам недавно освоил эту часть языка МКЛ. Так намного удобнее писать программы в смысле "один раз написал, а потом скопировал". Так что ждём ТЗ.
  8. 40
    Комментарии
    1
    Темы
    40
    Репутация Pro
     
    Новичок

    2 Медалей
    Цитата Сообщение от PAZITIV Посмотреть сообщение
    Вот на счёт функций полностью поддерживаю. Сам недавно освоил эту часть языка МКЛ. Так намного удобнее писать программы в смысле "один раз написал, а потом скопировал". Так что ждём ТЗ.
    Точно подмечено! Как когда-то мне сказали "зачем изобретать колесо, когда уже все создано"!
    Излагайте идеи в ветке! В личку писать не обязательно.
  9. 13
    Комментарии
    0
    Темы
    11
    Репутация Pro
     
    Новичок

    1 Медалей
    Помогите привязать советник к индикактору!!! Пишите в личку, буду очень благодарен!
  10. 1,009
    Комментарии
    8
    Темы
    769
    Репутация Pro
    Аватар для PAZITIV  
    В начале пути

    4 Медалей
    Цитата Сообщение от dima2005 Посмотреть сообщение
    Помогите привязать советник к индикактору!!! Пишите в личку, буду очень благодарен!
    "Привязать" советник нельзя. Можно подключить индикатор к советнику, что бы использовать показания этого самого индикатора в советнике.

Вверх
РегистрацияX

чтобы писать, читать, комментировать