どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 223

 
ALXIMIKS:


私は時間がありました - 私はタスクのためのアルゴリズムを考え、それを説明しました(詳細、人によっては少し不正確かもしれません - 人は収益性の点で異なっています)。

皮肉か? わからないが、参考までに。

コードを書くか、最適化するか。(できるけど、その価値がある?)

(p.s.artmedia70, no offence, I respect your attitude and opinion in general - honestly, but other day you yourself gave me code from iCustom-y to put it mildly not very optimised) (p.s.アートメディア70さん、 悪気はないんです。

こんな感じで、新しいバーのチェックに挿入すればうまくいくはずです。

このコードは、常にすべてのバーに目を通す必要がないように、一定のフラクタル数の後にkilkict=iBars(sy,tf)を絞り込むと、より最適なものになります。

ありがとうございます。先生のアルゴリズムにしたがって書き始めています。でも、国旗があれば、私が北京にいるのと同じように、あなたも北京に近づくことができます。いつもありがとうございます。
 
gince:
ありがとうございます。先生のアルゴリズムにしたがって書き始めています。でも、国旗があれば、私もあなたと同じように北京から遠く離れているのです。いつもありがとうございます。


https://www.mql5.com/ru/forum/131516/page34

その下には、初期の記事が体験談を語っています。この問題に関してはその通りです。

 
tara:


https://www.mql5.com/ru/forum/131516/page34

その下には、初期の記事が体験談を語っています。この問題に関してはその通りです。


SPS
 

何が問題なのでしょうか?

テスト中に "O "による除算エラーが表示されることがある

double LotsOptimized()
  {
   double lot=Lots;
   double Lot;
   if (isFloatLots == true)          // если флаг true то проводится оптимизация величины лота, иначе лот неизменен
     {  
        int orders=HistoryTotal();  // history orders total
        int losses=0; // number of losses orders without a break
        double loss=0;              
//---- select lot size
        double  lot_min         = MarketInfo( Symbol(), MODE_MINLOT  ); 
        double  lot_max         = MarketInfo( Symbol(), MODE_MAXLOT  ); 
        double  lot_step        = MarketInfo( Symbol(), MODE_LOTSTEP ); 
        double  lotcost         = MarketInfo( Symbol(), MODE_TICKVALUE );       
                
        lot                             = 0.0;
        double  dollarsPerPip   = 0.0;
        
        lot = AccountBalance()*MaxR/100.0;
        dollarsPerPip = lot/SL;
                
        lot = NormalizeDouble( dollarsPerPip/lotcost, 2 );      
        
        lot = NormalizeDouble( lot / lot_step, 0 ) * lot_step;
        
        if ( lot < lot_min ) lot = lot_min;
        if ( lot > lot_max ) lot = lot_max;
        
        if ( AccountFreeMarginCheck( Symbol(), type, lot ) < 10 || GetLastError() == 134 ) 
        { 
                Alert ( "Impossible to open position with lot = ", DoubleToStr( lot, 2 ), ". Not enough money." );
                return(-1);
        }
//---- return lot size
//         if(lot<0.1) lot=0.1;
           
//---- calcuulate number of losses orders without a break
           if(DcF>0)
          {  
        for(int i=orders-1;i>=0;i--)
                  {
                 if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) 
                   { 
                        Print("Ошибка в истории!"); 
                        break;
                   }
                if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) 
                  continue;
                 if(OrderProfit()>0)  break;
                if(OrderProfit()<0) losses++;loss=loss-OrderProfit();
                  }
        if(losses>=losses_orders) {Lot=NormalizeDouble(MathAbs(loss)/FV/MarketInfo(Symbol(),MODE_TICKVALUE)/TakeProfit1,1);
         }
       }
     }  
//---- return lot size
     if (Lot>lot) lot=Lot; 
   
  return(lot);
  }
 
Stells:

何が問題なのでしょうか?

テスト中に "O "による除算エラーが表示されることがある。


記号を検索し、ユーザーからどの変数が分割に参加するかを確認します。

SL ;

FV ;

テイクプロフィット1 .

中には0というものもあるかもしれません。

 
Stells:

何が問題なのでしょうか?

テスト中に "O "による除算エラーが表示されることがある

タイプテストをしてください。

if(!SL==0)
   {
  dollarsPerPip = lot/SL;
   }
などなど.
 
ALXIMIKS:


また、ありがとうございました。私はあなたのコードを作り出そうとし、コメントを書きました。自分が理解するためにやったので、もしかしたら似たようなことを書くかもしれません。他人の作品のロジックを研究し、解明しようとする。そして、自分でも試してみる。

もしかしたら、時間を見つけて私のコメントをチェックし、必要なら訂正していただけるかもしれません。もう1つ質問です。

  if (Bufer0!=EMPTY_VALUE) 

インジケーターバッファが空でないことを意味するのか、それともこの変数が何か別の意味を持つのか?インジケータ・バッファは、次のようになります。

Bufer0[i]

全コードにコメント付き。

 int    counted_bars=IndicatorCounted();
//----
   int   a1=0,                               //преведущий фрактал (-1 ->нижний, 1 -> верхний)
         a2,                                 //нынешний фрактал  (-1 ->нижний, 1 -> верхний)
         a3,                                 //сума преведущий + нынешний
         kilkict,
         frac,                               //frac - флаг существования фракталов,
         frac1=0;                            //frac1- счетчик фракталов (+1 или 0 за цикл)
   int i;
   double Bufer0;                            //
   kilkict=iBars(NULL, 0);

   for (i=3; i<kilkict;i++){
      a2=0;frac=0;
      if(iFractals(NULL, 0, MODE_UPPER, i)>0) {            
         if (Bufer0!=EMPTY_VALUE) {          //
            a2+=1;                           //к числу фракталов добовляем 1
            frac=1;                          //флаг - фрактал есть
            frac1++;                         //счечик увеличиваем на 1
         }
      }
      if(iFractals(NULL, 0, MODE_LOWER, i)>0) {            
         if (Bufer0!=EMPTY_VALUE) {          //
            if(a2==0){
               frac1++;                      //счечик увеличиваем на 1 
               frac=1;                       //флаг - фрактал есть
            }
            a2+=-1;                          //к числу фракталов добовляем -1(т. е. уменшаем)
         }
      } 
      if (frac==0){continue;}                // если флага нет (фрактал ненайден)
      if (frac1==1){                         //если счечик равен 1,
         a1=a2; continue;
      }          
      a3=a1+a2;
      if(a3<0)           { a1=a2;continue;}//Два фрактала вниз  подряд найдено// 
      if(a3>0)           { a1=a2; continue;}//Два фрактала вверх подряд найдено //
      if(a3==0 && a1==0) { a1=a2;}// Два фрактала подряд вверх и два фрактала подряд вниз найдено //
   }

 

gince:

if (Bufer0!=EMPTY_VALUE) 

インジケーターバッファが空でなくなったということでしょうか、それともこの変数が何か他の意味を持つのでしょうか?

iFractals() はフラクタルの欠如として「空の値」(EMPTY_VALUE) ではなく 0 を返すので、この行は削除してかまいません。

質問は以下の通りです。2つの連続するフラクタルに注目するインジケータを作ろうとしているのでしょうか?それとも、EAで現在のバーに最も近い2つの連続したフラクタルを検索しているのでしょうか?なぜなら、インジケータとExpert Advisorの検索方法は異なっており、インジケータは最後から最初へ、つまり過去から現在へ計算し、Expert Advisorは現在から過去へバーを検索するためです。そのため、Expert Advisorとインジケーターで検索方向も異なります。

最後の質問ですが、出力結果はどのようにすればよいのでしょうか?

 
artmedia70:

iFractals() は「空の値」(EMPTY_VALUE) ではなく、フラクタルがないとしてゼロを返すので、この行は削除してかまいません。

質問は以下の通りです。2つの連続するフラクタルに注目するインジケータを作ろうとしているのでしょうか?それとも、EAで現在のバーに最も近い2つの連続したフラクタルを検索しているのでしょうか?なぜなら、インジケータとExpert Advisorの検索方法は異なっており、インジケータは最後から最初へ、つまり過去から現在へ計算し、Expert Advisorは現在から過去へバーを検索するためです。したがって、Expert Advisorとインジケーターでは、検索方向も異なります。

そして最後の質問、アウトプットはどうあるべきか?



インジケータとEAでは検索方法が異なり、インジケータは端から端まで、つまり過去から現在までを計算し、EAは現在から過去までのバーを検索 しています。

for (i=kilkict;i>0;i--)

結果、上2つ→売り(矢印の下)、下2つ→買い(矢印の上)となりました。信号はフラクタルの右側に+2本表示されます。それこそ冒頭のヒストリーでビジュアル的に確認したいですね。そして、おそらくフィルターも必要でしょう。

 
ALXIMIKS:


...

ってな 具合に

...


教えてくれ、説明してくれ、どうして「これ」の代わりに「これ」と書かれるのか?

1."it "のスペルは "f "ではなく "e "であることを知らないのですか?

2.手を動かすのが億劫で、「e」の字を押す方が楽?

3.キーボードに「e」キーはないのですか?ない場合は、なぜないのか?

4.何か特別なポン付けなのでしょうか?

5.その他、不明な点がある。それは何ですか?