MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1358

 

MakarFX , このバインディングはどのような機能を持っているのですか?


input int BarTrade = 5; // 5のトラッキングされた期間の数であると理解しています。

int TimeBarTrade=BarTrade*Period()*60; // どう理解すればいいのでしょうか? なぜ60倍なのでしょうか?

 
Alexey Belyakov:

MakarFX , このバインディングはどのような機能を持っているのですか?


input int BarTrade = 5; // 5のトラッキングされた期間の数であると理解しています。

int TimeBarTrade=BarTrade*Period()*60; // どう理解すればいいのか? なぜ60倍しているのか?

BarTrade*期間()*60

バー数* 現在のタイムフレーム * 60秒

棒読み秒読み

 
MakarFX:

BarTrade*期間()*60

バー数* 現在のタイムフレーム * 60秒

小節数(秒換算

こんなやり方もあるんですね。

int TimeBarTrade = PeriodSeconds()*BarTrade;
 
MakarFX:

に関するエラーを除外した場合

mode_stoplevel、 mode_tradeallowed、 mode_minlot、mode_lotstep、mode_maxlot

であれば、フクロウがサーバーを叩くことはないでしょう。

Makarさん、サーバーに迷惑をかけず、EAJをBANしないために必要なチェックを指摘していただき、本当にありがとうございました。

このように行われるチェック

停止用モッドストップレベル

         //ПРОВЕРКА НА МОДЕ СТОП ЛЕВЕЛ- МИНИМАЛЬНЫЙ УРОВЕНЬ СТОПА 
         if(sl<MarketInfo(Symbol(),MODE_STOPLEVEL)) // ЕСЛИ СТОПОЛС МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО 
         {
          sl= MarketInfo(Symbol(),MODE_STOPLEVEL);//СТОП  ЛОССУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
         }

モッドストップレベルの利益

      // ПРОВЕРКА ТЕЙК ПРОФИТА НА МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ УСТАНОВКИ
      
  if(tp<MarketInfo(Symbol(),MODE_STOPLEVEL)) // ЕСЛИ ПРОФИТ МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО 
         {
          tp= MarketInfo(Symbol(),MODE_STOPLEVEL);// ПРОФИТУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
         }
         


トレードオーソライズの 確認

//---- ПРОВЕРКА НА РАЗРЕШЕНИЕ ТОРГОВ ПЕРЕД ОТКРЫТИЕМ ОРДЕРОВ
   if(MarketInfo(Symbol(),MODE_TRADEALLOWED)==true)
   {// начало есл торговля разрешена
  /*
куча проверок на условия открытия и само открытие ордеров
*/
} // КОЕНЦ ПРОВЕРКИ НА РАЗРЕШЕНИЕ ТОРГОВЛИ
          
          else //ИНАЧЕ ЕСЛИ ТОРГОВЛЯ НЕ РАЗРЕШЕНА 
          
          { // НАЧАЛО ЭЛС ЕСЛИ ТОРГИ НЕ РАЗРЕШЕНЫ 
          
          Print("ТОРГИ НЕ РАЗРЕШЕНЫ- ПЫТАТЬСЯ ОТКРЫТЬ ОРДЕРА НЕ БУДЕМ");
          }  // КОЕНЦ ЭЛС ЕСЛИ ТОРГИ НЕ РАЗРЕШЕНЫ

最大・最小ロットのチェック

まず、最大ロットと最小ロットの値を以下のように変数に取り込みました。

  double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT);   // МИНИМАЛЬНЫЙ ЛОТ РАЗРЕШЁННЫЙ БРОКЕРОМ
double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT);     // МАКСИМАЛЬНЫЙ ЛОТ РАЗРЕШЁННЫЙ БРОКЕРОМ

そして、聖杯を書きながら、下のどこかを確認します。

  if(lot<Min_Lot) lot=Min_Lot; //ЕСЛИ ЛОТ ПОЛУЧИЛСЯ МЕНЬШЕ ЧЕМ МИНИМАЛЬНЫЙ ЛОТ У БРОКЕРА ТО ЛОТ ПРИСВАЕМАЕМ МИНИМАЛЬНЫЙ ЛОТ У БРОКЕРА
if(lot>Max_Lot) lot=Max_Lot;  //ЕСЛИ ЛОТ ПОЛУЧИЛСЯ БОЛЬШЕ ЧЕМ МАКСИМАЛЬНЫЙ ЛОТ У БРОКЕРА ТО ОЛТ ПРИСВАЕВАЕМ МАКС ЛОТ У БРОКЕРА

これは正しいのでしょうか、それとも私が間違っているのでしょうか?

ロットは預金に対する割合で計算され、そこでこの値にポイントを掛けて正規化されるため、ロットステップの変化のチェックをしなかったのですが、このチェックは省略してもよいのでしょうか。それとも、とにかくやったほうがよいのでしょうか。もし、まだ確認する必要があるのなら、この小切手をどのように書けばいいのでしょうか?

これらのチェックの要点は、ストップ、プロフィット、ロットサイズを常に正しい値にすることで、一般的に注文を開始することができます。これらのパラメータがすべて問題なければ、Expert Advisor はサーバに迷惑をかけません。このことを正しく理解していますか?

 
DanilaMactep:

マカーさん、サーバーを回避するためのチェックやEAJをBANする方法を教えていただき、どうもありがとうございました。


//ПРОВЕРКА НА МОДЕ СТОП ЛЕВЕЛ- МИНИМАЛЬНЫЙ УРОВЕНЬ СТОПА
// ПРОВЕРКА ТЕЙК ПРОФИТА НА МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ УСТАНОВКИ

ここでは、スリップによる130の誤差が あるかもしれません

私ならこうする

         //ПРОВЕРКА НА МОДЕ СТОП ЛЕВЕЛ- МИНИМАЛЬНЫЙ УРОВЕНЬ СТОПА 
         if(sl<MarketInfo(Symbol(),MODE_STOPLEVEL)*1.5) // ЕСЛИ СТОПОЛС МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО 
         {
          sl= MarketInfo(Symbol(),MODE_STOPLEVEL)*1.5;//СТОП  ЛОССУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
         }
      // ПРОВЕРКА ТЕЙК ПРОФИТА НА МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ УСТАНОВКИ
      
  if(tp<MarketInfo(Symbol(),MODE_STOPLEVEL)*1.5) // ЕСЛИ ПРОФИТ МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО 
         {
          tp= MarketInfo(Symbol(),MODE_STOPLEVEL)*1.5;// ПРОФИТУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
         }
         
 

皆さんこんにちは。iHighest/iLowestで 見つけたチャートでダングリングポイントに悩まされた方はいらっしゃいませんか?

前史: 私はプログラミングの経験がほとんどなく、mql4で、ifの条件によって見つかったポイントをチャート上に表示し、それらを線で結ぶインジケータを書いています。論理的には正しくポイントを探しますが、オフセットして描画し、次に2小節分、3小節分と描画しています。どうすればいいのでしょうか? コードの入ったファイルも添付しておきます。


int start()
  {
   int counted_bars=IndicatorCounted(); //хранит количество посчитанных индикатором баров. Функция IndicatorCounted() возвращает количество неизмененных баров после прошлого вызова функции start().
   int n,limit;
   int val_index;
   
  if(counted_bars>0)
      counted_bars--;
   limit=Bars-counted_bars; //количество последних баров, которые нужно пересчитать.
   if(limit>barsToProcess)
      limit=barsToProcess;

   for(n=0; n<=limit; n++)
     {
      if((Close[n+1]>Open[n+1] && Open[n+2]>=Close[n+2]) || (Close[n+1]>Open[n+1] && Open[n+3]>Close[n+3]))
        {
         val_index=iLowest(NULL,0,MODE_LOW,3,n+1);
         myAZBuffer[n]=Low[val_index];
         ExtLowBuffer[n]=Low[val_index];
        }
      else
         if((Open[n+1]>Close[n+1] && Close[n+2]>=Open[n+2]) || (Close[n+1]<Open[n+1] && Close[n+3]>Open[n+3]))
          {
            val_index=iHighest(NULL,0,MODE_HIGH,3,n+1);
            myAZBuffer[n]=High[val_index];
            ExtHighBuffer[n]=High[val_index];
           }
     }
   return (0);
  }
ファイル:
AZforum.mq4  8 kb
 
azolotta:

皆さんこんにちは。iHighest/iLowestで見つけたチャートでダングリングポイントに悩まされた方はいらっしゃいませんか?

前史: 私はプログラミングの経験がほとんどなく、mql4で、ifの条件によって見つかったポイントをチャート上に表示し、それらを線で結ぶインジケータを書いています。論理的には正しくポイントを探しますが、オフセットして描画し、次に2小節分、3小節分と描画しています。コードの入ったファイルも添付しておきます。


オフセットがなく、正しくポイントが描画されます。

条件が満たされ、iHighest/iLowestが 現在のHigh/Lowより大きいか小さい場合

画になる


 
MakarFX:

がオフセットなく正しく描画される

条件を満たし、iHighest/iLowest が現在の High / Low よりも大きいか小さい場合。

すると


そこで、これらのポイントを視覚的に正しい位置に表示するために、myAZBuffer[n], ExtLowBuffer[n], ExtHighBuffer[n] に n の代わりに何か別のカウンターを入力する必要がありますが、どうすればいいでしょうか?
 
azolotta:
ということで、自分の間違いに気づき始めたようです)これらのポイントを視覚的に正しい位置に表示するには、myAZBuffer[n], ExtLowBuffer[n], ExtHighBuffer[n] にnではなく何か別のカウンターを入力する必要があることがわかりました。 しかし、どうすればいいのでしょう?

いいえ、正しく理解しています。

は、ヒストリーから2〜3小節を使用する条件です。

そのため、条件を満たした場合、2-3本のバーの後に描画されます。

 
MakarFX:

いいえ、正しく理解しています。

は、ヒストリーから2〜3小節を使用する条件です。

そのため、条件を満たした場合、2-3本のバーの後に描画されます。

OK、では、例えば、過去3本のバー(ifの条件を満たす)から最高値を選び、その上にポイントを置き(まさにこの高値に!)、さらに低値も見つけたい場合は、どのようにコードを作り直せばいいのでしょうか?