Problem mit der Gesamtzahl der offenen Aufträge - Seite 5

 

Sie müssen Ihren Code überdenken.

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

Diese werden immer wahr sein, da Sie sie beide auf Null setzen und nicht ändern. Sie schließen den folgenden Codeblock nicht in geschweifte Klammern {} ein

Sie verwenden den GV nicht, um irgendetwas zu prüfen, und benennen ihn mit einer Ganzzahl. Die Prüfung bewirkt nichts, da Sie das zurückgegebene bool keiner Variablen zuweisen.

Prüfen Sie, ob der OrderSend fehlschlägt, und wenn ja, geben Sie den Fehlercode aus.

 
GumRai:

Sie müssen Ihren Code überdenken.

Diese werden immer wahr sein, da Sie sie beide auf Null setzen und nicht ändern. Sie schließen den folgenden Codeblock nicht in geschweifte Klammern {} ein

Sie verwenden den GV nicht, um irgendetwas zu prüfen, und benennen ihn mit einer Ganzzahl. Die Prüfung bewirkt nichts, da Sie das zurückgegebene bool keiner Variablen zuweisen.

Prüfen, ob der OrderSend fehlschlägt, und wenn ja, den Fehlercode ausgeben.

Danke, ich glaube, ich bin auf dem richtigen Weg, aber jetzt werden mehrere Hedge-Trades geöffnet, obwohl Total<=1 angegeben ist. Mein Code sieht jetzt wie folgt aus:

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;}
              }
            }
 

Vielen Dank für diesen Ratschlag. Ich habe es endlich herausgefunden und es funktioniert jetzt. Das Stückchen Code sieht wie folgt aus:

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");

Welchen Sinn hat es, die GV einzustellen und sie dann sofort zu löschen?

 
GumRai:

Welchen Sinn hat es, den GV zu setzen und ihn dann sofort zu löschen?

Das macht Sinn, danke. Also ist es besser so:

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:

Das macht Sinn, danke. So ist es also besser:

Nein, es macht immer noch überhaupt keinen Sinn.

Es sollte einen Grund geben, die GV zu löschen

 
GumRai:

Nein, das ergibt immer noch keinen Sinn.

Es sollte einen Grund geben, die GV zu löschen

Nochmals vielen Dank. Wie wäre es damit?

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:

Nochmals vielen Dank. Wie wäre es damit?

Es macht immer noch keinen Sinn

   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);
           }
         }

Der Code-Block wird nur ausgeführt, wenn total==1, so dass die Prüfung if(total<1) immer falsch sein wird.

Grund der Beschwerde: