Обсуждение статьи "Пошаговое руководство по написанию советников в MQL5 для начинающих" - страница 27

 
Rustam Ayupov #:

Уважаемый Владимир ! Я по ходу изысков на форуме попал на Ваш титанический труд для чайников, приоритеты меняю, демоторг будет своим путем, а главное сейчас Ваша школа для начинающих, пережёвываю ценные выжимки Вашего Опыта, это бесценно, слов нет. Если дорасту как вставить трейлинг стоп в этот советник, то видимо займусь этим приоритетно, потому что в результате форвард оптимизации, советник создает длинные тейкпрофиты, их подстраховка стала кричащей. А по ходу обучения в Вашей школе видимо научусь видеть ошибки, без которых не бывает рабочих программ, ну и исправлять их. СПАСИБО ВАМ.

С Уважением, Рустам.

Пожалуйста, Рустам!

С уважением, Владимир.

 
Valeriy Yastremskiy #:

Ответить или Новый комментарий, внизу Прикрепить файл.

СПАСИБО за гениальную простоту) И вопрос, как бы Вам, с Вашим опытом трейлингов, вставить один такой в данный советник ?

 
MrBrooklin #:

Пожалуйста, Рустам!

С уважением, Владимир.

Нашел уникальный, простой до гениальности, "способ трейлинга" советника, самого автора, который, как уже традиционно для этой разработки, так и не исполняется так, как автор прокомментировал. Он, как и я, видимо тоже чайник, но большой) Обещал, при развороте цены, ранее открытая позиция закрывается, ну да, вот было бы здорово, если бы было бы... а вот только висят две открытые позиции, в обе стороны и не закрываются. Ранее, до Вашего первого совета, вообще сыпало в обе стороны целыми градами открытых позиций, которые не закрывались. Попробуйте дожать, эту вишенку на торте ?

 
Rustam Ayupov #:

СПАСИБО за гениальную простоту) И вопрос, как бы Вам, с Вашим опытом трейлингов, вставить один такой в данный советник ?

Вставить потестить оценить) Если с тралом результат лучше чем без него, то оставить.

 
Valeriy Yastremskiy #:

Вставить потестить оценить) Если с тралом результат лучше чем без него, то оставить.

Вставить не трудно, а что вставлять то ? Чтобы потестить оценить.

 
Rustam Ayupov #:

Вставить не трудно, а что вставлять то ? Чтобы потестить оценить.

код трала в свой советник без трала. Код трала лучше запихнуть в функцию. И по условию, если есть ордер, вызывать трал.

 
Rustam Ayupov #:

Нашел уникальный, простой до гениальности, "способ трейлинга" советника, самого автора, который, как уже традиционно для этой разработки, так и не исполняется так, как автор прокомментировал. Он, как и я, видимо тоже чайник, но большой) Обещал, при развороте цены, ранее открытая позиция закрывается, ну да, вот было бы здорово, если бы было бы... а вот только висят две открытые позиции, в обе стороны и не закрываются. Ранее, до Вашего первого совета, вообще сыпало в обе стороны целыми градами открытых позиций, которые не закрывались. Попробуйте дожать, эту вишенку на торте ?

Здравствуйте, Рустам! Чтобы мы могли дальше продуктивно сотрудничать, Вам сначала необходимо научиться прикреплять к сообщению код советника с проблемами. Если у Вас при тестировании советника есть проблемы, то нужно этот код сохранить под новым именем, скомпилировать, а потом прикрепить к сообщению. Сохранять советник под новым именем и компилировать нужно обязательно!!! Иначе мы с Вами при общении запутаемся в разных вариантах.

Если по какой-то причине у Вас не получается прикрепить код советника, можете использовать другой способ:

  1. В MetaEditor выделите код советника с проблемами путём нажатия на кнопки Ctrl+A
  2. Скопируйте код советника путём нажатия на кнопки Ctrl+С
  3. Создайте сообщении, которое Вы захотите разместить здесь на форуме и путём нажатия на кнопки AL+S откройте поле, в которое нужно будет вставить скопированный код путём нажатия на кнопки Ctrl+V
  4. Добавьте сообщение на форум

Если Вы не научитесь прикреплять или размещать в своих сообщениях код советника с проблемами, то дальнейший диалог с Вами становится бесполезным.

С уважением, Владимир.

 
MrBrooklin #:

Здравствуйте, Рустам! Чтобы мы могли дальше продуктивно сотрудничать, Вам сначала необходимо научиться прикреплять к сообщению код советника с проблемами. Если у Вас при тестировании советника есть проблемы, то нужно этот код сохранить под новым именем, скомпилировать, а потом прикрепить к сообщению. Сохранять советник под новым именем и компилировать нужно обязательно!!! Иначе мы с Вами при общении запутаемся в разных вариантах.

Если по какой-то причине у Вас не получается прикрепить код советника, можете использовать другой способ:

  1. В MetaEditor выделите код советника с проблемами путём нажатия на кнопки Ctrl+A
  2. Скопируйте код советника путём нажатия на кнопки Ctrl+С
  3. Создайте сообщении, которое Вы захотите разместить здесь на форуме и путём нажатия на кнопки AL+S откройте поле, в которое нужно будет вставить скопированный код путём нажатия на кнопки Ctrl+V
  4. Добавьте сообщение на форум

Если Вы не научитесь прикреплять или размещать в своих сообщениях код советника с проблемами, то дальнейший диалог с Вами становится бесполезным.

С уважением, Владимир.

Извините за задержку, за выходные выгорел, сутками, но нашел причину последней проблемы, как оказалось брокер FXopen, просто не дорос до MT5. Ну и научили меня простоте выбора файлов, к отсылке. Первые два Ваша оптимизация труда автора, где Вы прекратили авторскую невнимательность в коде, с массированным открыванием позиций, вместо одной, единственной, вторые два его декларации закрытия позиции при развороте цены. Во втором стоит поработать, все таки автор, если и не доделал, но хотел прибыльно)

 
Rustam Ayupov #:

Извините за задержку, за выходные выгорел, сутками, но нашел причину последней проблемы, как оказалось брокер FXopen, просто не дорос до MT5. Ну и научили меня простоте выбора файлов, к отсылке. Первые два Ваша оптимизация труда автора, где Вы прекратили авторскую невнимательность в коде, с массированным открыванием позиций, вместо одной, единственной, вторые два его декларации закрытия позиции при развороте цены. Во втором стоит поработать, все таки автор, если и не доделал, но хотел прибыльно)

Ну с этим, последним, пока разбираюсь, пытаюсь хоть что то понять и начать в нем ориентироваться, пока к подстраховке длинных тейкпрофитов. Я уже готов к сюрпризам автора в дальнейшем, дорогу осилит идущий)

Файлы:
 
Rustam Ayupov #:

Ну с этим, последним, пока разбираюсь, пытаюсь хоть что то понять и начать в нем ориентироваться, пока к подстраховке длинных тейкпрофитов. Я уже готов к сюрпризам автора в дальнейшем, дорогу осилит идущий)

Здравствуйте, Рустам! Внизу сообщения прикрепляю рабочий вариант этого советника. Изменения коснулись данного участка кода:

//--- Putting all together   
   if(Buy_Condition_1 && Buy_Condition_2)
     {
      if(Buy_Condition_3 && Buy_Condition_4 && PositionsTotal()==0)
        {
         ZeroMemory(mrequest);
         mrequest.action = TRADE_ACTION_DEAL;                                  // immediate order execution
         mrequest.price = NormalizeDouble(latest_price.ask,_Digits);           // latest ask price
         mrequest.sl = NormalizeDouble(latest_price.ask - STP*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.ask + TKP*_Point,_Digits); // Take Profit
         mrequest.symbol = _Symbol;                                            // currency pair
         mrequest.volume = Lot;                                                 // number of lots to trade
         mrequest.magic = EA_Magic;                                             // Order Magic Number
         mrequest.type = ORDER_TYPE_BUY;                                        // Buy Order
         mrequest.type_filling = ORDER_FILLING_FOK;                             // Order execution type
         mrequest.deviation=100;                                                // Deviation from current price
         //--- send order
         bool check=OrderSend(mrequest,mresult);
         // get the result code
         if(mresult.retcode==10009 || mresult.retcode==10008) //Request is completed or order placed
           {
            Alert("A Buy order has been successfully placed with Ticket#:",mresult.order,"!!");
           }
         else
           {
            Alert("The Buy order request could not be completed -error:",GetLastError());
            ResetLastError();           
            return;
           }
        }
     }
/*
    2. Check for a Short/Sell Setup : MA-8 decreasing downwards, 
    previous price close below it, ADX > 22, -DI > +DI
*/
//--- Declare bool type variables to hold our Sell Conditions
   bool Sell_Condition_1 = (maVal[0]<maVal[1]) && (maVal[1]<maVal[2]);  // MA-8 decreasing downwards
   bool Sell_Condition_2 = (p_close <maVal[1]);                         // Previous price closed below MA-8
   bool Sell_Condition_3 = (adxVal[0]>Adx_Min);                         // Current ADX value greater than minimum (22)
   bool Sell_Condition_4 = (plsDI[0]<minDI[0]);                         // -DI greater than +DI

//--- Putting all together
   if(Sell_Condition_1 && Sell_Condition_2)
     {
      if(Sell_Condition_3 && Sell_Condition_4 && PositionsTotal()==0)
        {
         ZeroMemory(mrequest);
         mrequest.action=TRADE_ACTION_DEAL;                                // immediate order execution
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // latest Bid price
         mrequest.sl = NormalizeDouble(latest_price.bid + STP*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.bid - TKP*_Point,_Digits); // Take Profit
         mrequest.symbol = _Symbol;                                          // currency pair
         mrequest.volume = Lot;                                              // number of lots to trade
         mrequest.magic = EA_Magic;                                          // Order Magic Number
         mrequest.type= ORDER_TYPE_SELL;                                     // Sell Order
         mrequest.type_filling = ORDER_FILLING_FOK;                          // Order execution type
         mrequest.deviation=100;                                             // Deviation from current price
         //--- send order
         bool check=OrderSend(mrequest,mresult);
         // get the result code
         if(mresult.retcode==10009 || mresult.retcode==10008) //Request is completed or order placed
           {
            Alert("A Sell order has been successfully placed with Ticket#:",mresult.order,"!!");
           }
         else
           {
            Alert("The Sell order request could not be completed -error:",GetLastError());
            ResetLastError();
            return;
           }
        }
     }
   return;
  }
//+------------------------------------------------------------------+

Было добавлено то, что выделено желтым цветом,:

&& PositionsTotal()==0

а также удалено условие, связанное с Buy_opened и Sell_opened:

         // any opened Buy position?
         if(Buy_opened)
           {
            Alert("We already have a Buy Position!!!");
            return;    // Don't open a new Buy Position
           }
.
.
.
         // any opened Sell position?
         if(Sell_opened)
           {
            Alert("We already have a Sell position!!!");
            return;    // Don't open a new Sell Position
           }

С уважением, Владимир.

Файлы: