[アーカイブ!】どんなルーキーの質問でも、フォーラムを散らかさないように。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 2. - ページ 513

 

オート・オプティマイザーでオープニング・プライスに 最適化させるためのプロのヒント。

https://forum.mql4.com/ru/42125

 
こんにちは、私はEAの書き方を理解しようとしている初心者です。
もし、前に閉じた注文が買い注文でストップロスで閉じた場合、0.1ロットをストップロス50で売り、利益を50とする」という書き方を教えてください。)
 

スペシャリスト!助けてどうすれば実現できるのか?


int start() 
{
 bool OPEN=false;

 условие1=х;//вычисление условия1
 условие2=y;//вычисление условия2
 
 if(условие1==х)OPEN=true;
 
 if(условие2==y&&OPEN==true)
 OrderSend;

までOPEN=trueを固定する必要があります。
条件2.この間、条件1が変更になる場合があります。

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

 

出鼻をくじく

 bool OPEN=false;
 
sergeev:

出鼻をくじく


本当にありがとうございました。何事も見事にシンプルと言うことですね。そして、一日中頭を悩ませていたのです。
 

バッファの上または下だけの条件に対応する最初のバー( Quant_Bars )の数を計算するとき、何が間違っているのか教えてください。つまり、インジケータがクローズドバー(1)の前に描画されるとすぐに、私はインジケータがバーの下にある以前のバー(条件に適合しないものを除く)、およびその逆で、運動の反対方向にカウントする必要があります。 私のバリアントは間違った値を出します。

その方法を知っている人はいますか?

#property indicator_chart_window     
#property indicator_buffers 1
#property indicator_color1 Green
double step = 0.1;
double max = 0.2;

int n = 1;
double S;
double barA;
double barB;
double Bufer[];
int k,k1;
//---------------------------------
int init()
{
   SetIndexStyle(0, DRAW_ARROW,EMPTY,0,Green); 
   SetIndexArrow(0, 159); 
   SetIndexBuffer(0, Bufer);
   return (0);
}
//---------------------------------
int deinit() 
{
   return (0);
}
//----------------------------------
int start()
{

 k1=k;
 for(int i=Bars-2; i>=0; i--)  
    {
     if(i == Bars-2)
       {
         Bufer[i] = Low[i] - 10.0 * Point;
         n = 1;
         S = step;
         barA = High[i];
         barB = Low[i];
       }
    else
       {
         if(Close[i] > barA)
           {
             barA = Close[i];
               if (n==1 && S <= max - step)
                  { S = S + step; }
             k=1;
           }          
         if(Close[i] < barB)
           {
            barB = Close[i];
              if (n == -1 && S <= max - step)
                 { S = S + step;}
            k=2;
           }
        if (n == 1)
           { Bufer[i] = Bufer[i + 1] + S * (barA - (Bufer[i + 1]));}
       else
           { Bufer[i] = Bufer[i + 1] + S * (barB - (Bufer[i + 1]));}
      
       if ((Bufer[i+1] < Close[i + 1] && Bufer[i] > Close[i]) || (Bufer[i + 1] > Close[i + 1] && Bufer[i] < Close[i]))
          {
           S = step;
             if (n == 1)
                {Bufer[i] = barA;}
             else
                {Bufer[i] = barB;}
           barB = Close[i];
           barA = Close[i];
           n = -1 * n;
          }
       }
   }
    
//--------------------------Подсчитать бары:
   int num1 = 2;  // бар  
   int counted_bars = IndicatorCounted(); 
 //-----СЕЛЛ
if(Bufer[2]<Close[2] && Bufer[1]>Close[1])    
   {
     for( i=num1; i<=Bars; i++ )
        { 
          if(Bufer[i]<Close[i])
                                 
             {int Quant_Bars = Quant_Bars+i;}
          if(Bufer[i]>Close[i] && Bufer[i-1]<Close[i-1]) 
          break;
         }
     Alert("Число баров= ",Quant_Bars, "  counted_bars= ",counted_bars," бары= ", Bars );    
    }
    
 //-----БАЙ  
if(Bufer[2]>Close[2] && Bufer[1]<Close[1])     
   {
     for( i=num1; i<=Bars; i++ )
        { 
          if(Bufer[i]<Close[i])                     
            {Quant_Bars = Quant_Bars+i;}
          if(Bufer[i]>Close[i] && Bufer[i-1]<Close[i-1]) 
          break;
         }
     Alert("Число баров= ",Quant_Bars, "  counted_bars= ",counted_bars," бары= ", Bars );    
    }  

   return (0);
}
[Удален]  

の質問をします。

なぜ、私のExpert Advisorがきちんと全預金を排出し、実質的にすべての取引が負けているとき、その後、私は信号の "極性 "を変更すると、預金が急速に増加しないが、すでに?))) ポイントは同じで、オーダーオープン方向のみのエラー、それとも他に何かあるのでしょうか?

 
Maxaxa:

の質問をします。

なぜ、私のExpert Advisorがきちんと全預金を排出し、実質的にすべての取引が負けているとき、その後、私は信号の "極性 "を変更すると、預金が急速に増加しないが、すでに?))) ポイントは同じで、オーダーオープン方向のみのエラー、それとも他に何かあるのでしょうか?

これはトレーディングの哲学です。
 
Maxaxa:


なにかべつにある
 
Solree:

こんにちは。

注文は4件で、売りが2件、買いが2件です。シールは、比喩的に言えば、価格が上がれば作り、下がれば買うということです。買いが作成されると売りは削除され、その逆も同様です。チケットが作成されると、1回目の売りまたは買いが変数posに 格納されます。4つとも同じコメント、"Aelit "です。だから、コードがあるんです。

チケットでは正常に順番が選択されていますが、コメントの比較に失敗することが非常に多いです。興味本位で、else Alert(OrderComment()); を作ってみたところ、ログに「Alert: Aelit[sl]」と表示されました。sl]とは何ですか?すべての注文に同じコメントがついているからでしょうか?じゃあなんでテストのために他の人と合わないコメントしたら同じ【sl】になったんだ?コメントチェックを外すと、OrderModifyのログにチケットエラーが発生します。最初は注文が作成される前にこの条件に達したのかと思いましたが、そうではなく、その時点ですでに注文があり、条件が発動した場合も発動していない場合もチケットは同じです。それをどう理解するか。

証券会社があなたのコメントに追加したのは奇跡ではありません - StopLossに達した時点で注文は終了しています。

チケットの注文選択が正しく編成されていません。このような選択をする場合、まず、MODE_TRADES は不要であり、OrderSelect()関数では 省略される。

次に、注文の選択が成功した後、その注文がチケットに応じた注文の配列から選択されたのか、つまり成行注文からなのか、それともクローズ注文からなのかをチェックしません。

これを行うには、注文が選択された後、その終了時刻をチェックし、それがゼロに等しければ、その注文は成行注文となり、そうでなければ、すでに終了した注文から選択されます(したがって、あなたのコメントに追加されたものです)。