Советник для каждой валютной пары - какой код открыть только один раз для каждой валютной пары? - страница 4

 
onewithzachy:
Вы глубоко ошибаетесь. Ваш код никогда не будет выполнен!!! Используйте код RaptorUK.

Хорошо :)

Я просто запутался в этом:

"закончить, когда j = 0"

спасибо!

 
grey.unit:

Так что это должно выглядеть следующим образом:

потому что вы это написали:

или я ошибаюсь?

Вы ошибаетесь ... посмотрите на это: for

В моем коде выражение 2 - j >= 0 означает ... while ( j >= 0 ), поэтому цикл выполняется, пока j равно 0 или больше, т.е. от OrdersTotal() - 1 до 0 включительно.

Если вы используете j = 0 (возможно, это должно быть написано j == 0), это означает while (j == 0), и цикл выполняется только тогда, когда j равно 0.

 
А, ладно, теперь я понял.
 
RaptorUK:

Нет, сделайте так...

Первая позиция ордера равна 0, поэтому если у вас 5 ордеров, то позиции будут 0, 1, 2, 3, 4 ... поэтому последняя - OrdersTotal() - 1 ... поэтому для обратного отсчета вы начинаете с OrdersTotal()-1 и заканчиваете на 0.

Означает ли это, что OrdersTotal() -1 - нет заказов, затем 0 - первый заказ, 1 - 2 заказа и так далее до 4, что равно 5 заказам.

Не мог бы кто-нибудь сообщить мне, если мое понимание того, что -1 равно No orders, является правильным?

Спасибо

 
barnacle7:

Означает ли это, что OrdersTotal () -1 - нет заказов, затем 0 - 1 заказ, 1 - 2 заказа и так далее до 4, что равно 5 заказам.

OrdersTotal() - это количество открытых ордеров. Да, если у вас всего 5 ордеров, то они нумеруются от 0 до 4.
 

Мне также нужна помощь по тому же вопросу. Я начинающий кодер и я пытался ввести код, который я видел здесь, но он не работает вообще, можете ли вы мне помочь. Orderselect был использован

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

void OnTick()

{
       double movingAverageSS = iMA(NULL,60,LowerMAS,0,MODE_SMA,PRICE_CLOSE,0);    
       double lastmovingAverageSS = iMA(NULL,60,LowerMAS,0,MODE_SMA,PRICE_CLOSE,1);     
       double movingAverageSB = iMA(NULL,60,LowerMAB,0,MODE_SMA,PRICE_CLOSE,0);       
       double lastmovingAverageSB = iMA(NULL,60,LowerMAB,0,MODE_SMA,PRICE_CLOSE,1);          
       double movingAverageFS = iMA(NULL,60,UpperMAS,0,MODE_SMA,PRICE_CLOSE,0);    
       double lastmovingAverageFS = iMA(NULL,60,UpperMAS,0,MODE_SMA,PRICE_CLOSE,1);   
       double movingAverageFB = iMA(NULL,60,UpperMAB,0,MODE_SMA,PRICE_CLOSE,0);    
       double lastmovingAverageFB = iMA(NULL,60,UpperMAB,0,MODE_SMA,PRICE_CLOSE,1);    
       int b;int bM;int s;int sM;    
       bool res = (OrderSelect(b,SELECT_BY_POS));    
       bool resM = (OrderSelect(bM,SELECT_BY_POS));    
       bool ses = (OrderSelect(s,SELECT_BY_POS));    
       bool sesM = (OrderSelect(sM,SELECT_BY_POS));    
       
       if((lastmovingAverageFB<lastmovingAverageSB) && (movingAverageFB > movingAverageSB) && res == false  && resM == false )      
         {
         b = OrderSend (Symbol(),OP_BUY,lotSize,Ask,4,Ask - SLPB*_Point, Ask + TPB1*_Point,NULL,1,0,Green);       
         bM = OrderSend (Symbol(),OP_BUY,lotSize,Ask,4,Ask - SLPB*_Point, Ask + TPB2*_Point,NULL,2,0,Green);       
         }       
         else if((lastmovingAverageFS>lastmovingAverageSS)&&(movingAverageFS<movingAverageSS) && ses == false && sesM == false)     
         {  
         s = OrderSend (Symbol(),OP_SELL,lotSize,Bid,4,Ask + SLPS*_Point,Ask - TPS1*_Point,NULL,3,0,Red);       
        sM = OrderSend (Symbol(),OP_SELL,lotSize,Bid,4,Ask + SLPS*_Point,Ask - TPS2*_Point,NULL,4,0,Red);   
}


 
&& res == false

Orderselect вернет true, если выбран заказ.

Возможно, вы можете использовать магическое число в сочетании с именем символа.

Вот пример в статье, которую вы можете изучить:https://www.mql5.com/en/articles/1359.

MagicNumber: "Magic" Identifier of the Order
MagicNumber: "Magic" Identifier of the Order
  • www.mql5.com
In МТ3, management of open positions was rather time-taking. Traders had at their disposal a rather limited tool set to work with the list of open and closed positions. The problem of distinguishing between "own" and "someone else's" positions was solved in rather complicated ways. In МТ4, the situation has cardinally changed. Now, trader can...
 
  1.        int b;int bM;int s;int sM;    
           bool res = (OrderSelect(b,SELECT_BY_POS));    
           bool resM = (OrderSelect(bM,SELECT_BY_POS));    
           bool ses = (OrderSelect(s,SELECT_BY_POS));    
           bool sesM = (OrderSelect(sM,SELECT_BY_POS));    

    b - нет значения, OrderSelect не работает. bM - нет значения, OrderSelect не работает. s - нет значения, OrderSelect не работает. sM - нет значения, OrderSelect не работает.

  2. В чем смысл выбора нескольких заказов? Результатом является последний успешный выбор.

  3.          b = OrderSend (Symbol(),OP_BUY,lotSize,Ask,4,Ask - SLPB*_Point, Ask + TPB1*_Point,NULL,1,0,Green);       
             bM = OrderSend (Symbol(),OP_BUY,lotSize,Ask,4,Ask - SLPB*_Point, Ask + TPB2*_Point,NULL,2,0,Green);       
    
    b и bM - локальные переменные. Номера билетов теряются при возврате.

  4. Почему вы пытаетесь выбрать по позиции, но пытаетесь сохранить номера билетов? Если вы выбираете по действительному номеру билета, это не значит, что ордер открыт.

  5. Вы покупаете по Ask и продаете по Bid.

    1. TP/SL вашего ордера на покупку (или Sell Stop's/Sell Limit's entry) срабатывают, когда Bid / OrderClosePrice достигает его. Использование Ask±n делает ваш SL короче, а TP длиннее, на величину спреда. Разве вы не хотите, чтобы указанная сумма использовалась в любом направлении?

    2. TP/SL вашего ордера на продажу (или вход по Buy Stop/Buy Limit) сработает, когда цена Ask / OrderClosePrice достигнет ее. Чтобы сработать по определенной цене Bid, добавьте средний спред.
      MODE_SPREAD (Павел) - Форум по программированию MQL4 - Страница 3 #25.

    3. На графиках показаны только цены Bid. Включите линию Ask, чтобы увидеть, насколько велик спред(Tools → Options (control+O) → charts → Show ask line).
      Большинство брокеров с переменным спредом значительно расширяются в конце дня (5 PM ET) ± 30 минут. Мой GBPJPY (OANDA) показывает средний спред = 26 пунктов, но средний максимальный спред = 134.