help me please [解決済み].

 

私はmql4の初心者です。このコードは複数の注文を開きますが、どうすればそれを避けることができますか?

どうすればいいのでしょうか?

ありがとうございます。

void OnTick()
  {

  
  double up= iIchimoku (NULL, 5,9,26,52,3,0);
  double down= iIchimoku (NULL,5,9,26,52,4,0);

  
  if (MathMin (up,down) < Bid )
  

  OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
    
    
  }
  
 
void OnTick()
  {

  if(OrdersTotal()==0)
    {
     double up= iIchimoku (NULL, 5,9,26,52,3,0);
     double down= iIchimoku (NULL,5,9,26,52,4,0);

     if (MathMin (up,down) < Bid )

     OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
    }
    
  }
 
ありがとうございました。
 

これは解決策ではありますが、先に進めばわかるように、最善の解決策ではありません。

しかし、現時点ではお役に立てるでしょう。

 
Marco vd Heijden:

それは解決策ですが、あなたが続ければ学ぶように、それは最善の解決策ではありません。

しかし、それはこの時点であなたを助けることができます。

はい、それはトピックの問題を解決しましたが、それが閉じるとき、それはまだ雲の上にある場合は、新しい順序を作成します。この新しい問題を解決するために私を助けてもらえますか?

どのようにブロックすべての新しい注文は、最初の閉じるに成功した後?

 

フラグを作成することができます。

bool order=0;


そして、注文が行われたときに、その値を1に設定することができます。

void OnTick()
  {

  if(order==0)
    {
     double up= iIchimoku (NULL, 5,9,26,52,3,0);
     double down= iIchimoku (NULL,5,9,26,52,4,0);

     if (MathMin (up,down) < Bid )

     OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
     order=1;
    }
    
  }

でも、ordersend関数の 戻り値をチェックする必要があるという警告が出るので

void OnTick()
  {

  if(order==0)
    {
     double up= iIchimoku (NULL, 5,9,26,52,3,0);
     double down= iIchimoku (NULL,5,9,26,52,4,0);

     if (MathMin (up,down) < Bid )

     int ticket=OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
      {
       if(ticket!=-1)
        {
         order=1;
        }
      }
    }
  }

注文が成功したかどうかでフラグを設定するのはどうでしょう?

その場合、もし注文が失敗しても試行錯誤を続けます。

 
mrluck1:

はい、それはトピックの問題を解決しましたが、それが閉じるとき、それはまだ雲の上にある場合は、新しい順序を作成します。この新しい問題を解決するために私を助けてもらえますか?

どのようにブロックすべての新しい注文は、正常に最初の閉鎖後?

マルコがすでに言及しているように、おそらく他の問題にぶつかるでしょう。

他のシンボルに未決済の注文がある場合はどうでしょうか?

他のEAで制御されている注文があったらどうでしょう?

保留中の 注文がある場合はどうでしょうか?

最初のトリガーを閉じたときに、そのトリガーがまだ有効であったらどうでしょうか?

後者に対しては、Marcoが提案したようにフラグを使うことができます。ただ、フラグをリセットするタイミングを決めないと、EAが二度と取引をしなくなることを忘れないでください。

あるいは、雲の下/上から、クロス/状態の変化をチェック することもできます。

 

あなたのコードを入れたら、チケットがundleclaredと言われたので、それを宣言しましたが、今、コードはちょうど前のように、複数の注文を開く、今どのように続行しますか?

void OnTick()
  {

bool order= 0;
int ticket;

  if(order==0)
    {
     double up= iIchimoku (NULL, 5,9,26,52,3,0);
     double down= iIchimoku (NULL,5,9,26,52,4,0);

     if (MathMax (up,down) < Bid )

    int ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
      {
       if( ticket!=1)
        {
         order=1;
        }
      }
    }
  }


そして、正直なところ、knave。この例では、そのスクリプトでは、1つだけの貿易は大丈夫です。
 
mrluck1:

あなたのコードを入れたら、チケットがundleclaredと言われたので、それを宣言しましたが、今、コードはちょうど前のように、複数の注文を開く、今どのように続行しますか?

void OnTick()
  {

bool order= 0;
int ticket;

  if(order==0)
    {
     double up= iIchimoku (NULL, 5,9,26,52,3,0);
     double down= iIchimoku (NULL,5,9,26,52,4,0);

     if (MathMax (up,down) < Bid )

    int ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
      {
       if( ticket!=1)
        {
         order=1;
        }
      }
    }
  }


それはおそらく変数の範囲について 読むのに役立つだろう。

注文の 値は、各ティックにどうなりますか?

 

さて、それではbooleanフラグを持つチケットを宣言します。

bool order=0;
int ticket;

そして

void OnTick()
  {

  if(order==0)
    {
     double up= iIchimoku (NULL, 5,9,26,52,3,0);
     double down= iIchimoku (NULL,5,9,26,52,4,0);

     if (MathMax (up,down) < Bid )

    ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
      {
       if( ticket>0)
        {
         order=1;
        }
      }
    }
  }

OnTick()で宣言することはできません。もちろん、チケットの値はtick ごとにリセットされるからです。

また、OrderSendはチケット番号を返すか、失敗した場合は-1マイナス1することに注意してください。

 

を入れた。

ブールオーダーと

int ticket

をグローバル変数に、残りのコードをOnTickに置きましたが、それでもまだ何も入力されません。

理由: