未決済注文の総量に関する問題 - ページ 5

 

コードを考え直す必要があります。

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

これらは両方とも0に設定し、変更しないので常に真になります。次のコードのブロックを中括弧{}で囲んでいませんね。

GVを使って何もチェックせず、整数値で名前をつけています。返されたboolを変数に代入していないので、チェックは何もしていません。

OrderSend が失敗したかどうかをチェックし、失敗した場合はエラーコードを 表示します。

 
GumRai:

コードを考え直す必要があります。

これらは両方とも0に設定し、変更しないので常に真になります。次のコードのブロックを中括弧{}で囲んでいませんね。

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

GVを設定した後、すぐに削除することに何の意味があるのでしょうか?

 
GumRai:

GVを設定した後、すぐにそれを削除することに何の意味があるのでしょうか?

ありがとうございます。

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:

なるほど、こういうことだったのか。

いいえ、まだ全く意味がありません。

GVを削除する理由があるはずです。

 
GumRai:

いや、やはり全く意味がない。

GVを削除する理由があるはずです

ありがとうございました。

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) は常に false になります。