[警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 - ページ 628

 
IgorM:

for文はパラメータなし?- 第二は、EA用のグローバル変数があることです - ターミナル用ではありません、それらはあなたが書いたように、start()関数を含むすべての関数の前に、コードの一番最初に記述されています - すべてのティックでstart()関数が呼び出され、あなたは フラグ変更= falseです;と すると、このフラグと以前の状態を比較しようとしますが、その状態は常に偽になる

もし、これから始めるのであれば、KodobaseのExpert Advisorを使い、市場に参入する条件を自分なりに変えてみると、より早く参入できます。


Vinin
ループの目的は何ですか?

start()関数が1ティックごとに実行されるということですか?そうすると、ループは本当に不要になります。

 

MarkTrade:

つまり、start()関数は1ティックごとに実行されるのですね。それなら、ループは本当に不要です。

https://book.mql4.com/ru/programm/special
 

女の子の踊り方が面白い...。一斉に立ち上がり、歌う...

テストにテストを重ね、その結果に基づいて関数・条件・データを追加・変更し、収益性やドローダウンの面で多かれ少なかれ良い結果を得た...。最適化なし全編リロードしたら急降下し始めた、いや~プラム、いや~大プラム・・・。

もし私がクォートの履歴を再ロードする前に(テスト前にEURUSDの履歴をプリロードして いたので、念のため再ロードしました - 2010年にはなぜかモデリング品質にエラーがありました...)...歴史をリロードする前に、エキスパート-アドバイザが正常に、よくほぼ正常に別の前後のテストに耐え、正常に3年間の歴史に取引されたが、引用符を再ロードした後、月に2〜3回ドローダウンを持っているとテストを開始してから二三ヶ月以上働かなかった始めた...条件は何も変えていないのに、履歴だけが...。

サーバー上で履歴が書き換えられていることが判明?ソビエト連邦の何世紀もの間については?

じゃあ、何が言いたいんだ?

 
artmedia70:

彼女たちのダンスが面白い・・・。立ち上がり、歌った。

テストにテストを重ね、関数・条件・データを追加・作成し、収益性やドローダウンの面で多かれ少なかれ良い結果を得た...。最適化なし履歴を全部再読み込みしたら落ち始めた、いや、BIG BLEEPどころじゃない...。

相場履歴をリロードする前に(テスト前にEURUSDの履歴を全てプリロードして いたので、念のためリロードしましたが、なぜか2010年以降のモデリング品質に誤差がありました...)。歴史をリロードする前に、エキスパート-アドバイザが正常に、よくほぼ正常に別の前後のテストに耐え、正常に3年間の歴史に取引されたが、引用符を再ロードした後、月に2〜3回ドローダウンを持っているとテストを開始してから二三ヶ月以上働かなかった始めた...条件は何も変えていないのに、履歴だけが...。

サーバー上で履歴が書き換わることが判明?ソビエト連邦の太古の昔から?

それから、この件の要点は?

MTがまだサーバーから切断されていない場合は、それを行う時間です(そして、再び不必要に接続しないでください) - テスターまたは最適化を開始するたびに、MTはサーバーからスプレッド(など)を取得します。つまり、スプレッドが1ピップのときは、すべてが超優秀ですが、別のときにスプレッドが4~5に拡大すると、Expert Advisorはおそらく損失を出し始めるでしょう。当然ながら、実際の取引で起こりやすい最悪の条件で最適化した方が良い。

 

ここで少し手直しをします。

глобальные переменные (в самом начале, под #property link )
bool flagchange = false;
bool PrevFlag = false;
bool flag = false; 

int start()
  {
   //---вход в позицию
   //int    spread=MarketInfo("EURUSD",MODE_SPREAD);
   int Slippage = 3;
   int i = 0;
   double lt = getLots() ; // минимальный лот
   RefreshRates();
   int total = OrdersTotal();   
   int ticket = -1;
      flag = GetEma();
        if (PrevFlag != flag) // проверим, сигнал ема изменился?
         {flagchange = true;      // изменился!
         PrevFlag = flag;}
        else flagchange = false;
        if (flagchange == True)
         {       
           int Total=OrdersTotal(); // есть открытые позиции?
           if(Total>0)
            {
              for(i=Total-1; i>=0; i--) 
              {
                if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true) 
                  {
                    if(OrderType()==OP_BUY || OrderType()==OP_SELL) // Только Buy и Sell
                     {
                       if(OrderType()==OP_BUY) 
                         bool Result=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,CLR_NONE);
                       else
                         Result=OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,CLR_NONE);
                     if(Result!=true) 
                        {          
                          Print("LastError = ",GetLastError()); 
                         }              
                      }
                   }
                else 
                   if (flag ==true) OrderSend(Symbol(),OP_BUY,lt,Ask,Slippage,Bid - sl * Point,0,"Buy",888,0,Blue);
                   else OrderSend(Symbol(),OP_SELL,lt,Bid,Slippage,Ask + sl * Point,0,"Seel",888,0,Red);
              }
           }                                            
        }
     
   return(0);
  }
      //////////////////////////////////////////////////////
  bool GetEma() {
  //----Получим значение EMA1
      int ma1= iMA(Symbol(),PERIOD_H1,ema1,0,1,6,0);
  //----Получим значение EMA2   
      int ma2= iMA("",PERIOD_H1,ema2,0,1,6,0); 
      if (ma1>ma2) return (True);
      else return (False);}
   /////////////////////////////////////////////////////  
         // посчитаем разтер лота
   double getLots() 
        {
                double minlot = MarketInfo(Symbol(), MODE_MINLOT);
                 int round = MathAbs(MathLog(minlot) / MathLog(10.0)) + 0.5;
                 double lot = minlot;
//---- select lot size
                 lot = NormalizeDouble(AccountFreeMargin() * Risk / 1000.0, round);
                 if (AccountFreeMargin() < lot * MarketInfo(Symbol(), MODE_MARGINREQUIRED)) 
                        {
                                lot = NormalizeDouble(AccountFreeMargin() / MarketInfo(Symbol(), MODE_MARGINREQUIRED), round);
                        }
                 if(lot < minlot) lot = minlot;
                 double maxlot = MarketInfo(Symbol(), MODE_MAXLOT);
                 if(lot > maxlot) lot = maxlot;
//---- return lot size
   return(lot);
        }

まだ取引されない :(

 
chief2000:

テスターの実行や最適化を行うたびに、MTはサーバーからスプレッド(その他)を受け取ります。つまり、スプレッドが1ピップのときは、すべてが超優秀ですが、別のときにスプレッドが4~5に拡大すると、Expert Advisorはおそらく損失を出し始めるでしょう。当然ながら、実際の取引で起こりやすい最悪の条件で最適化した方が良い。

すべて明確で、長い間理解されている...。でも、今日は土曜日だし...。今日、スプレッドが変わることはあるのでしょうか?いや...今が一番低い、つまりベストコンディションなんだろうけど...。いや...スプレッドがあっても、EAはうまく取引できていたのに...。ヒストリーリセットの前に
 
artmedia70:
すべて明確で、長い間理解されている...。でも、今日は土曜日だし...。今日、スプレッドが変わることはあるのでしょうか?いや...今が一番低い、つまりベストコンディションなんだろうけど...。いや...スプレッドがあっても、EAはうまく取引できていたのに...。履歴リセット前
さて、チャートで取引の 経過を見ると、何が変わったのでしょうか?
 
Techno:
さて、取引経過をチャートで見てみると、何が変わったのでしょうか。 。
エクイティのドローダウンが何倍にもなった...。オープンポジション にはもっと条件があることがわかった。彼は実際に多くのポジションを開いている...
 
MarkTrade:

ここで少し手直しをします。

まだ取引されていない :(

MetaEditorにはデバッガがないので、条件/ロジック
のどこかにエラーがあるはずなので、こうしています。

をコードの末尾に追加します。

Comment( "flag= ", flag, " PrevFlag= ", PrevFlag, ..........);

return(0)です。

}

テスターの可視化モードで、低速で何が変化し、何が変化しないかを確認します。

 
artmedia70:
株式のドローダウンが何倍にもなっている...。ポジションを開く条件が増えたことがわかります。彼は実際に多くのポジションを開いている...
テストチャートではなく、見積もりチャートなのですが、大まかに、開店、閉店の推移はどうなっていますか?