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

 
artmedia70:
それだけの違いがあったのでしょうか?
を見ただけで、他は見ていないので、グレーのコードを読むのは不便です。
 
artmedia70:

そういうやり方もあるのかもしれませんね。:

//===================================================================================
double CalculateProfit() 
{
   double ld_ret_0 = 0;
   for (int cnt = 0;  cnt < OrdersTotal(); cnt++) {
      if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) {
         if (OrderSymbol()!=Symbol())           continue;
         if (OrderType()>1)                     continue;
         if (OrderMagicNumber()==MagicNumber || 
             OrderMagicNumber() == LMagN)       ld_ret_0 += OrderProfit();
         }
      else if (!OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) {
         Print ("Func: CalculateProfit(), Select Order Error = ", GetLastError());
         break;
         }
      }
   return (ld_ret_0);
}
//===================================================================================



すべてが完璧に機能します!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 

テスターで3つのboolパラメータを最適化すると、その値の9つの組み合わせすべてを実行するというのは正しい理解でしょうか? すなわち、以下のようになります。

1) bool1=true、bool2=true、bool3=true。
2) bool1=true, bool2=true, bool3=false。
3) bool1=true、bool2=false、bool3=true。
4) bool1=true, bool2=false, bool3=false など。
 
eddy:

テスターで3つのboolパラメータを最適化すると、その値の9つの組み合わせすべてを実行するという理解で合っていますか...?

最適化の際にboolを段階的に実行することができないようです。代わりにintを取り、0から1まで実行します。
 

boolを入れれば、trueとfalseのバリアントが実行されるのでは?

最適化を使ったことがない、話題に馴染んできた

 
試してみてください。私には効果がありませんでした。
 
daytrader19:

親愛なる同僚の皆さん、 私はまだMQLプログラミングの完全な「ダミー」で、このトピックを勉強し始めたのはごく最近の ことです。しかし、私はすでに最初のExpert Advisorを書き始めていましたし、少なくとも書こうとしていました。

このトピックの182ページ 目で、このEAが取引すべき基準を示しました。その内容をご覧ください(このページの最後の記事)。3週間格闘していますが、まだここに取引基準を担当するコードの部分を書くことができません。このトピックに特化したチュートリアルの章を読みましたが、この特別なケースでは役に立ちませんでした

私はプログラミングの戦いの中で、この部分のバリエーションを何十個も書いてきましたが、どれもまともに動作しませんでした。明らかに知識 不足で、MQL そんなに早く 使いこなすことはできません。とにかく、少なくともおおよそ私が望むように動作するコードのバリエーションは以下の通りです。

//+-------------------------------------------------------------------------------------+
//| Расчет значений технических индикаторов с формированием сигналов для позиций        |
//+-------------------------------------------------------------------------------------+
void GetSignal()
{
 Signal = 0;
// - 1 - == Получение значений индикаторов ==============================================
 double SAR = iSAR(Symbol(), 0, SARStep, SARMaximum, 0);
 double EnvUp = iEnvelopes(Symbol(), 0, EnvPeriod, EnvMethod, EnvShift, EnvPrice,
 EnvDeviation, MODE_UPPER, 1);
 double EnvDn = iEnvelopes(Symbol(), 0, EnvPeriod, EnvMethod, EnvShift, EnvPrice,
 EnvDeviation, MODE_LOWER, 1);
 double StochM = iStochastic(Symbol(), 0, StochK, StochD, StochSlowing, StochMethod,
 StochPrice, MODE_MAIN, 1);
 double StochS = iStochastic(Symbol(), 0, StochK, StochD, StochSlowing, StochMethod,
 StochPrice, MODE_SIGNAL, 1);
// - 1 - == Окончание блока =============================================================

// - 2 - == Генерация сигнала ===========================================================
 if (SAR < Low[1])
   {
    Signal = 3;                                                          // Закрытие SELL
    if (StochM > StochS && StochM >= 80 && StochS >= 80 && High[1] >= EnvUp && SAR < Open[1])
      Signal = 1;                                                         // Открытие BUY
   }   
 
 if (SAR > High[1])
   {
    Signal = 4;                                                           // Закрытие BUY
    if (StochM < StochS && StochM <= 20 && StochS <= 20 && Low[1] <= EnvDn && SAR > Open[1])
      Signal = 2;                                                        // Открытие SELL
   }   
// - 2 - == Окончание блока =============================================================
}

コードが曲がっていたり斜めになっていたり、一般的に ベイの位置 売りが ごちゃごちゃしていますよね しかし、これはストキャスティクスとエンベロープがお互いを無視することなく、一緒に取引されているときのコードの唯一のバリエーションです。同時に、パラボリックのシグナルは、なぜか取引に考慮されない。と にかく、このような「尻切れトンボ」をあまり叱らないでください、コードが正しくないことは十分承知しています。

私のExpert Advisorのコードを修正してください、助けてください。苦労しているんですよ。もっと簡単なストラテジー(Mooving + Momentum; Mooving +RSI)を実装 したことがあるが、これでは できない。よろしくお願いします。182ページで 説明したルールでEAが取引できるように、間違った行をすべて書き換えてください。本当に必要なんです。

P.Sさん:Expert Advisorのコードは、既成の MQLテンプレートを使っているので、全部は書いて いないんです

私の主な(唯一ではないかもしれませんが)間違いがわかった気がします。私の取引条件では、すべての条件を論理的な「and」で組み合わせています。私が理解する限り、すべての条件を同時に満たす必要があるということです。エンベロープとストキャスティクスのシグナルは同期しているはずですが、システムルールでは正しくありません。た だし、パラボリックは エンベロープとストキャスティクスのシグナルを受信 した後、ポジションの開始を確認する必要が あります。5~10小節後に確認されることもあります(これはごく普通のことです)。

質問:この "after "はどのようにコードに 入れられるのでしょうか?もし可能であれば、私のコードの例を示してください。
よろしくお願いします。この取引基準でもう疲れました。
 
eddy:

テスターが3つのboolパラメータを最適化した場合、その値の9つの組み合わせすべてを実行するという理解で合っていますか? つまり、そのようなことはありません。


2の3乗は常に8である :-)
 
daytrader19:

私の主な(唯一ではないかもしれませんが)間違いがわかったような気がします。私の取引基準の条件は、すべて論理的な「and」で括っています。私が理解する限り、これはすべての条件を同時に満たす必要があることを意味します。エンベロープとストキャスティクスのシグナルは同期しているはずですが、システムルールでは正しくありません。た だし、パラボリックは エンベロープとストキャスティクスのシグナルを受信 した後、ポジションの開始を確認する必要が あります。また、5~10本程度でポジションを確定することもあります(これはごく普通のことです)。

質問ですが、この "after "をどのようにコードに貼り 付ければいいのでしょうか?可能であれば、私のコードの例を示してください。
よろしくお願いします。この取引基準で疲弊していくばかりです。


だから試してみてください。私はあなたのコードをこのページで修正しました - 私自身はチェックしていません - コメントに注意してください。

すべてP182に記載のとおりです。

bool Buy_signal=false, Sell_signal=false; // эту строку разместить в глобальные переменные эксперта!!!!!!!!!!

//+-------------------------------------------------------------------------------------+
//| Расчет значений технических индикаторов с формированием сигналов для позиций        |
//+-------------------------------------------------------------------------------------+
void GetSignal()
{
 Signal = 0;
// - 1 - == Получение значений индикаторов ==============================================
 double SAR = iSAR(Symbol(), 0, SARStep, SARMaximum, 1);                            // тут тоже правки в коде - вместо "0"-го используем первый бар 
 double EnvUp = iEnvelopes(Symbol(), 0, EnvPeriod, EnvMethod, EnvShift, EnvPrice,
 EnvDeviation, MODE_UPPER, 1);
 double EnvDn = iEnvelopes(Symbol(), 0, EnvPeriod, EnvMethod, EnvShift, EnvPrice,
 EnvDeviation, MODE_LOWER, 1);
 double StochM1 = iStochastic(Symbol(), 0, StochK, StochD, StochSlowing, StochMethod,
 StochPrice, MODE_MAIN, 1);
 double StochS1 = iStochastic(Symbol(), 0, StochK, StochD, StochSlowing, StochMethod,
 StochPrice, MODE_SIGNAL, 1);
 double StochM2 = iStochastic(Symbol(), 0, StochK, StochD, StochSlowing, StochMethod,
 StochPrice, MODE_MAIN, 2);
 double StochS2 = iStochastic(Symbol(), 0, StochK, StochD, StochSlowing, StochMethod,
 StochPrice, MODE_SIGNAL, 2);

// - 1 - == Окончание блока =============================================================

// - 2 - == Генерация сигнала ===========================================================
   if (SAR > High[1]) {Buy_signal=false; Sell_signal=false;                                 // сбрасываем флаги условий открытия по стохастику и энвелопсу 
                       Signal = 4;}                                                         // Закрытие BUY

   if (SAR < Low[1])  {Buy_signal=false; Sell_signal=false;

                       Signal = 3;}                                                         // Закрытие Sell

    
   if ( StochM2 < StochS2 && StochM1 > StochS1 &&  StochM1 <= 20 && Low[1] <= EnvDn)        // ставим флаги условий открытия по стохастику и энвелопсу в лонг 
       { 
          Buy_signal=true;
          Sell_signal=false;
        }          
    if (SAR < Low [1] && Buy_signal==true &&  Sell_signal==false) 
         Signal = 1;                                                         // Открытие BUY
      
 
     
   if ( StochM2 > StochS2 && StochM1 < StochS1 &&  StochM1 >= 80 && High[1] >= EnvUp)        // ставим флаги условий открытия по стохастику и энвелопсу в шорт
       { 
          Buy_signal=false;
          Sell_signal=true;
        }          
    if (SAR > High [1] && Buy_signal==false &&  Sell_signal==true) 
          Signal = 2;                                                        // Открытие SELL
      
// - 2 - == Окончание блока =============================================================
}
 
Roger:

2の3乗は常に8である :-)

ナイスな観察眼です :-)))