Проблема с общим количеством открытых ордеров - страница 5

 

Вам нужно переосмыслить свой код.

buy_hedge==0 && sell_hedge==0 && OrderOpenPrice()>Bid+Hedge*Pip)

Они всегда будут истинными, если вы установите их оба в ноль и не будете их менять. Вы не заключаете следующий блок кода в фигурные скобки {}

Вы не используете GV для проверки чего-либо и называете его целым числом. Проверка ничего не делает, так как вы не присваиваете возвращаемый bool никакой переменной.

Проверьте, не произошел ли сбой при выполнении OrderSend, и если произошел, выведите код ошибки.

 
GumRai:

Вам нужно переосмыслить свой код.

Они всегда будут истинными, если вы установите их оба в ноль и не будете их менять. Вы не заключаете следующий блок кода в фигурные скобки {}

Вы не используете GV для проверки чего-либо и называете его целым числом. Проверка ничего не делает, так как вы не присваиваете возвращаемый bool никакой переменной.

Проверить, не сработал ли OrderSend, и если сработал, вывести код ошибки.

Спасибо. Я думаю, что я на правильном пути, но теперь он открывает несколько хеджевых сделок, даже если указано, что total<=1. Мой код теперь выглядит следующим образом:

if(total<=1 && OrderOpenPrice()>Bid+Hedge*Pip){
               GlobalVariableCheck(ticket);
               sell_hedge=OrderSend(Symbol(),OP_SELL,HedgeLots,Bid,3,Bid+StopLossHedge*Pip,0,"Hedge",0,0,Blue);
               sell_hedge=GlobalVariableGet(ticket);
               sell_hedge=sell_hedge+1;
               GlobalVariableSet(ticket,sell_hedge);
               int New_SellHedge=GlobalVariableGet(ticket);
               if(sell_hedge!=New_SellHedge) {sell_hedge=New_SellHedge;}
              }
            }
 

Спасибо за этот совет. Я наконец-то разобрался и теперь все работает. Часть кода выглядит следующим образом:

if(GlobalVariableCheck("InTrade")){
      }
      else if(OrderOpenPrice()>Bid+Hedge*point){
         sell_ticket=OrderSend(Symbol(),OP_SELL,HedgeLots,Bid,3,Bid+StopLossHedge*point,0,"Hedge",magic,0,Blue);{
         GlobalVariableSet("InTrade",1);
         GlobalVariableDel("InTrade");
         return(0);
        }
     }
   }
 
         GlobalVariableSet("InTrade",1);
         GlobalVariableDel("InTrade");

Какой смысл устанавливать ГВ, а затем сразу же удалять его?

 
GumRai:

Какой смысл устанавливать ГВ и тут же удалять его?

Понятно, спасибо. Так что лучше так:

if(GlobalVariableCheck("InTrade")){
  }
   else if(OrderOpenPrice()>Bid+Hedge*Pip){
      sell_ticket=OrderSend(Symbol(),OP_SELL,HedgeLots,Bid,3,Bid+StopLossHedge*Pip,0,"Hedge",magic,0,Blue);{
         GlobalVariableSet("InTrade",1);
         return(0);
        }
      }
    }
GlobalVariableDel("InTrade");
 
Trader3000:

Это имеет смысл, спасибо. Так что лучше так:

Нет, это все равно не имеет смысла.

Должна быть причина для удаления ГВ.

 
GumRai:

Нет, это по-прежнему бессмысленно.

Должна быть причина для удаления ГВ

Спасибо еще раз. Как насчет этого?

int total=0;
   for(int i=OrdersTotal()-1; i>=0; i--)
      if(OrderSelect(i,SELECT_BY_POS) && OrderMagicNumber()==0 && OrderSymbol()==
         total++;
        }
if(GlobalVariableCheck("InTrade")){
  }
   else if(total==1 && OrderOpenPrice()>Bid+Hedge*Pip){
      sell_ticket=OrderSend(Symbol(),OP_SELL,HedgeLots,Bid,3,Bid+StopLossHedge*Pip,0,"Hedge",magic,0,Blue);{
         GlobalVariableSet("InTrade",1);
            if(total<1) GlobalVariableDel("InTrade");
            return(0);
           }
         }
       }
 
Trader3000:

Еще раз спасибо. Как насчет этого?

Это все еще не имеет смысла

   else if(total==1 && OrderOpenPrice()>Bid+Hedge*Pip){
      sell_ticket=OrderSend(Symbol(),OP_SELL,HedgeLots,Bid,3,Bid+StopLossHedge*Pip,0,"Hedge",magic,0,Blue);{
         GlobalVariableSet("InTrade",1);
            if(total<1) GlobalVariableDel("InTrade");
            return(0);
           }
         }

Блок кода выполняется только если total==1, поэтому проверка if(total<1) всегда будет ложной.