[ARCHIVE]フォーラムを乱立させないために、どんなルーキーの質問でも。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 5. - ページ 339

 
artmedia70:

外的変数の話をしたわけではないんです。という話をしたんです。

ある状況を想像してみましょう。最後に空いているポジションで判断する必要があります。


テスター用。

変数を作成し、そこに最後に開いたポジションの必要なデータを格納します。

新しいポジションが開かれたら、すぐにこれらの変数に必要なデータを追加します。

次のポジションを開くシグナルが来たら(例えば20分後)、いくつかの基準を確認する必要があり、それによって開くべきポジションのデータを決定するのです。これらの基準は、慣習上、前職のオープンポジションに依存します。変数から読み出し(前回のオープニングで保存しておいた)、新しいポジションの追加データとして使用します。

ポジションをオープンすると、新しくオープンしたポジションのデータを変数に格納します。


リアルに。

同じ状況を想像してみよう、しかし.最後のポジションが開かれ、そのデータが変数に格納された後、10分が経過したとします(次のポジションが開かれるまでにさらに10分経過しなければなりません(ここでは「テスター」でこれを想定しました))。そして、この間に何らかの理由でExpert Advisorが再起動されました。

変数に格納された最後のオープンポジションのデータでEAを再起動するとどうなるのでしょうか?存在しなくなる。

では、どこで手に入れればいいのか。右-検索そのため、必要なデータを検索する機能が必要なのです。したがって、変数に格納するのではなく、必要なときに一度にすべてを探し出す方が、本当はもっと簡単で速いのです。


このたびは、ご報告が遅くなり申し訳ございません。:))

いつもながらごもっともです。私も、新鮮なデータが必要なときは、関数を使います。そして、あなたがおっしゃる「変数」は、意味がなく、情報がすぐに陳腐化してしまうので、使いません。そして、コードが重くならないように、避けられる機能にはこだわらないようにと、Victorにアドバイスしましたご清聴ありがとうございました。
 
こんにちは。MetaTrader 4で利益制限を設定することは可能ですか?まさに通貨単位で、pips単位ではありません。その場合、どのように
 
   for(i=0;i<limit;i++) /*вопрос: еще использовал и такую последовательность for(i=Bars-1; i>=0; i--), есть ли разница с какой 
   "стороны" заполнять массив и рассматривать значения?*/
   
   RSI=iRSI(0,0,8,PRICE_CLOSE,i); 
   
   // задаем пустое значение буфера 
   RSIBuffer3[i]=0.0
   /* вроде так, мысль такая, что буфер должен быть пустым в цикле for(int i=0;i<limit;i++), до момента достижения 
   RSI заданных значений. Вопрос: так ли? и где он должен находится? */ 
   
   //ставим условие при котором пока RSI >= 70                     
   {
    while RSI>=70    
     {
       i++; //вопрос: где то видел эту часть кода в конце цикла, есть ли разница?
             
       // заполняем буфер значениями RSI
        
       RSIBuffer3[i]=iRSI(0,0,8,PRICE_CLOSE,i);
             
     }
        
     // определяем позицию максимального значения в массиве      
        
     int RSI_max = ArrayMaximum (RSIBuffer3[i], int count=WHOLE_ARRAY, int start=0); /* тут выдает ошибку на значениях count и start отсюда вопрос: нужно ли определять размер массива через ArraySize? и какое начальное значение должно быть, не i ли?*/
             
     //ищем бар со значением RSI равным максимальному значению RSI в массиве 
        
     if RSI=RSIBuffer3[RSI_max];
                
     // рисуем стрелку на этом значении
        
     ExtMapBuffer2[i]=High[i]+5*Point;
            
     else 
                
     ExtMapBuffer2[i]=0.0;
           
   }
      //ставим условие при котором пока RSI <= 30                     
   { 
    while RSI<=30
        {    
        i++;
        // заполняем буфер значениями RSI
        
        RSIBuffer3[i]=iRSI(0,0,8,PRICE_CLOSE,i);
        
        {        
                
        // определяем позицию минимального значения в массиве  
            
        int RSI_min = ArrayMinimum (RSIBuffer3[i], int count=WHOLE_ARRAY, int start=0);
        
                
        //ищем бар со значением RSI равным максимальному значению RSI в массиве 
        
        if RSI=RSIBuffer3[RSI_min];
                
        // рисуем стрелку на этом значении
             
        ExtMapBuffer1[i]=Low[i]-5*Point;
             
        else 
             
        ExtMapBuffer1[i]=0.0;            
          
        }
                   
   return(0);
   }

私は何とかプログラムに単純なロジックを変換することはできません、私はロジックに対処するのに役立ちます(あなたはいくつかの文献をお勧めすることができます)。

課題:70以上(30以下)の値で最大(最小)RSIを計算し、バーの上に(上)矢印を 描く。

をこの値で表示します。

実装(第一部、第二部も同様)。

1. 各バーのRSI値を計算する。

2. RSI が 70 より大きい間、RSI バッファをその値で満たす。

3. 配列中の最大値の位置を求める。

4. RSI値が配列中の最大RSI値と等しいバーを探す。

5.このバーの上に矢印を描きます。

まあ、こういうのもあるんですが、コードを書きながら、疑問やエラーが多くて、混乱中です((

そして、コードでの実装は以下の通りです。

 
テキストとコードが混在しています、すみません
 

皆さん、次のアルゴリズムをループを使って エンコードする方法を教えてください。

if (iLow (シンボル(),0,1) > iLow (シンボル(),0,10))// 最初の ローソク足のMINIMUM>10本目の ローソク足のMINIMUMの場合

OrderSend(Symbol(),OP_BUY,0.1,Ask,1,Bid-2950*Point,Bid+150*Point, "jfh",123 ); // 注文をオープンする。

せねばならぬ

Low 1と 同時に Low 2と同時に Low 3の場合........................。...と同時に 安値 9キャンドル>安値10キャンドル( つまり 1〜9の 安値キャンドル)

/ /オープン・オーダー

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

 
solnce600:

皆さん、次のアルゴリズムをループを使って エンコードする方法を教えてください。

if (iLow (シンボル(),0,1) > iLow (シンボル(),0,10))// 最初の ローソク足のMINIMUM>10本目の ローソク足のMINIMUMの場合

OrderSend(Symbol(),OP_BUY,0.1,Ask,1,Bid-2950*Point,Bid+150*Point, "jfh",123 ); // 注文をオープンする。

せねばならぬ

Low 1と 同時に Low 2と同時に Low 3の場合........................。...と同時に 安値 9キャンドル>安値10キャンドル( つまり 1〜9の 安値キャンドル)

/ /オープン・オーダー

ありがとうございます。


条件成立フラグを作り、truにセットし、ループ内で必要な数のローソクを渡し、そのうちの一つでも条件が満たされなければ、falseフラグにセットしてループから抜ける。
 
FAQ:

条件成立フラグを作り、パイプにセットし、ループ内で必要な数のロウソクを渡し、いずれかのロウソクで条件を満たさなかった場合、偽フラグにセットしてループを抜ける。

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

コードを書いてもらえるとありがたいのですが......そうすれば、すべて理解できますから。

 

bool have = true;

for(int i=0;i<10;i++){

   if(Low[i]<=Low[i+1]){have=false; break;} 

if(have){

// действия если условие соблюдено 

}else{

 // действия если условие не соблюдено

}

 
FAQ:

bool have = true;

for(int i=0;i<10;i++){

   if(Low[i]<=Low[i+1]){have=false; break;} 

if(have){

// действия если условие соблюдено 

}else{

 // действия если условие не соблюдено

}

ありがとうございました、ありがとうございました。と、あなたのような方々のおかげで、プログラミングの知恵を学ぶことが、また少し前進しました......。
 

人々は、それがトリガーされていない場合、n、pipsの数で保留中の順序を 閉じるにはどうすればよいのでしょうか?