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

 
Artyom Trishkin:

サードパーティリソースとプライベートチャンネルを宣伝する。私でなければ、出入り禁止になっていたかもしれません。

どんな広告?問われていることをビデオで解説。

 
Andrey Sokolov:

どのようなCMですか?問われていることについてのビデオチュートリアル。

ボタンによるビデオレッスン
 
私は何を間違えているのだろう?
int OnInit()
  {
//--- indicator buffers mapping
    SetIndexBuffer(0,Buy);
   SetIndexBuffer(1,Sell);  
   // Устанавливаем нулевые значения для индикатора, при которых не будет сигнальных стрелок
   SetIndexEmptyValue (0, 0);
   SetIndexEmptyValue (1, 0);
   //Определяем стиль отображения индикаторных линий - стрелка
   SetIndexStyle (0, DRAW_ARROW);
   SetIndexStyle (1, DRAW_ARROW); 
   // Установим значки "стрелки" для буферов
   SetIndexArrow(0, 234);  //Стрелка "вниз" для продаж
   SetIndexArrow(1, 233);  //Стрелка "вверх" для покупок
   //Устанавливаем текст описания стрелок индикатора для отображения информации в всплывающей подсказке.
   SetIndexLabel(0, "Продаём");
   SetIndexLabel(1, "Покупаем");
   //Определяем разрядность значений индикаторных линий - приравниваем разрядности фин. инструмента
   IndicatorDigits (Digits);
   //Строка с кратким названием индикатора выводится в сплывающей подсказке при наведении указателя мыши на стрелку
   IndicatorShortName ("Мой первый индикатор");
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
    int limit=rates_total-prev_calculated-5;
   if(limit<1) return(0);
   for(int i=limit;i>=0;i--)
     {
      // Снимем показания индикатора
     double in1b = iCustom(NULL,0,"in1",1,0); // индикатор 1 стрелка вверх
     double in1s = iCustom(NULL,0,"in1",0,0); // индикатор 1 стрелка вниз
     
     double in2b = iCustom(NULL,0,"in2",0,0); // индикатор 2 стрелка вверх
     double in2s = iCustom(NULL,0,"in2",1,0); // индикатор 2 стрелка вниз
     
     if (in1b/* && in2b*/)
           Buy[i]=high[i];
     if (in1s/* && in2s*/)
            
             Sell[i]=low[i];
   
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
 
jarikn:
どうしたんだろう?
if (in1b)

ということは、「in1b」と何を比較しているのでしょうか?

 

皆さん、こんにちは。Expert Advisorに、リスクサイズで計算された利益とは別に、固定ポイントの利益を付けようとしています。リスクサイズでの利益は問題なく動作しています。しかし、それは、ある非現実的な価値をpipsで設定します。リスクサイズやポイントで利益が出るものをリストアップしています。

  enum enumTP //ПЕРЕЧИСЛЕНИЕ ДЛЯ ТЕЙК ПРОФИТА
  {
   en_fiks_tp = 1, // ФИКСИРОВАННЫЙ В ПУНКТАХ
   en_v_r = 0,  // В КОЛИЧЕСТВЕ Р
  };


プロフィットサイズをポイント単位で定義する変数を設定しました。

extern int Razmer_tp = 1500; // ТЕЙК ПРОФИТ В ПУНКТАХ

そして、次のような利益計算を書き、オンティックでその正しさを確認します。

//+--НАЧАЛО РАСЧЁТА ПРОФИТА---------------------------------------------------------------------- Разделитель ---+

if(sl > 0 && Tip_tp == en_v_r) // ЕСЛИ ПРОФИТ В КОЛИЧЕСТВЕ Р
//{// НАЧАЛО ПРОВЕРКИ НА НОЛЬ
  tp=sl*tp_v_R; // ВЫЧИСЛЯЕМ ПРОФИТ УМНОЖАЯ СТОП ЛОС НА КОЛИЧЕСТВО РИСКА
  //-НАЧАЛО РАСЧЁТА ПРОФИТА В ПУНКТАХ---------------------------------------------------------------------------------------------+
  
  if(Tip_tp == en_fiks_tp)
  {//--НАЧАЛО ЕСЛИ ПРОФИТ В ПУНКТАХ---------------------------------------------------------------------------------------------+
  tp = Razmer_tp;  // ПРОФИТУ ПРИСВАЕВАЕМ КОЛИЧЕСТВО ПУНКТ
  
  }//---КОЕНЦ ЕСЛИ ПРОФИТ В ПУНКТАХ---------------------------------------------------------------------------------------------+
  tp= NormalizeDouble(tp, Digits());// НОРМАЛИЗУЕМ ПРОФИТ, ЧТОБЫ РАБОТАЛО НА ЛЮБЫХ КАТИРОВКАХ
  
  // ПРОВЕРКА ТЕЙК ПРОФИТА НА СТОП ЛЕВЕЛ ОТ МАКАРА--
  if(tp<stoplevel)                                                           // ЕСЛИ ПРОФИТ МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО
  {
         tp=NormalizeDouble(stoplevel*1.5,Digits); // ПРОФИТУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
  }
  //} // КОНЕЦ ПРОВЕРКИ НА НОЛЬ 
  
  //+--КОНЕЦ РАСЧЁТА ПРОФИТА---------------------------------------------------------------------- Разделитель ---+


リスクサイズでの利益の場合は問題なく動作しますが、pipsでの固定利益の場合は動作しません。ポイントでの利益計算を正しく行うには、何が間違っているのか、何を修正すればよいのか、アドバイスをお願いします。

 
DanilaMactep:

皆さん、こんにちは。Expert Advisorに、リスクサイズで計算された利益とは別に、固定ポイントの利益を付けようとしています。リスクサイズでの利益は問題なく動作しています。しかし、それは、ある非現実的な価値をpipsで設定します。リスクサイズやポイントで利益が出るものをリストアップしています。


プロフィットサイズをポイント単位で定義する変数を設定しました。

そして、次のような利益計算を書き、オンティックでその正しさを確認します。


リスクサイズでの利益の場合は問題なく動作しますが、pipsでの固定利益の場合は動作しません。ポイントで利益を計算する場合、何が間違っているのか、何を修正すればいいのか、アドバイスをお願いします。

ポイント単位での利益を"Point"に掛けて頂きたい。

 
jarikn:
私は何を間違えているのだろう?

何してるんですか?

 
MakarFX:

ということは、「in1b」と何を比較しているのでしょうか?

スクリーンショットを追加 するボタンがないので、この方法でスクリーンショットを追加します。

ちょっと書いてみたけど、やっぱりうまくいかない)

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
    int limit=rates_total-prev_calculated-
1 ;
   if(limit<1) return(0);
   for(int i=limit;i>=0;i--)
     {
     
      // Снимем показания индикатора
     double in1b = iCustom(NULL,0,"in1",1,1); // индикатор 1 стрелка вверх
     double in1s = iCustom(NULL,0,"in1",0,1); // индикатор 1 стрелка вниз
     
     double in2b = iCustom(NULL,0,"in2",0,0); // индикатор 2 стрелка вверх
     double in2s = iCustom(NULL,0,"in2",1,0); // индикатор 2 стрелка вниз
      Comment("in1b = "+in1b+"\n""in1s = "+in1s);
     if (in1b<999999 && in1s>999999)
           Sell[i]=low[i];
     if (in1s<999999 && in1b>999999)
            Buy[i]=high[i];
             
   
     }
     
//--- return value of prev_calculated for next call
   return(rates_total);
  }
ファイル:
 
jarikn:

書いていただいたスクリーンショットを追加する ボタンがないので、この方法でスクリーンショットを追加してみます。

ちょっとやってみたけど、やっぱりうまくいかない)

クリーンなチャートでインジケータを実行し、データウィンドウを開き、スクリーンショットを撮る。
 
例えば、ここに2つの指標があります。矢印とポイントが1つのキャンドルに表示されたとき、我々は買いシグナルとその逆を必要とします。
ファイル:
in1.ex4  11 kb
in2.ex4  3 kb