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

 

よろしくお願いします。私はオフセット(iMANULLPERIOD_M111MODE_SMAPRICE_OPEN、i)の ために、更新後のすべての時間、for()ループを理解することはできません。)インジケーターが再描画される!


//+------------------------------------------------------------------+
//|                                                         help.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+

#property copyright   "2005-2014, MetaQuotes Software Corp."
#property link        "http://www.mql4.com"
#property strict
#include <MovingAverages.mqh>
//--- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 2
#property   indicator_color1  clrSilver
#property   indicator_color2  clrRed
#property   indicator_width1  2

//--- indicator parameters
input int SignalSMA=8;            // Signal SMA Period
//--- indicator buffers
double    ExtBuffer[];
double    ExtSignalBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(void)
  {
   IndicatorDigits(Digits+1);
//--- drawing settings
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexStyle(1,DRAW_LINE);
//--- indicator buffers mapping
   SetIndexBuffer(0,ExtBuffer);
   SetIndexBuffer(1,ExtSignalBuffer);

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence                           |
//+------------------------------------------------------------------+
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 i,limit;
//--- last counted bar will be recounted
   limit=rates_total-prev_calculated;
   if(prev_calculated>0)
      limit++;
//--- counted in the 1-st buffer
   for(i=0;i<limit;i++)
      ExtBuffer[i]=(
                    iMA(NULL,PERIOD_CURRENT,1,0,MODE_SMA,PRICE_HIGH,i)
                    +iMA(NULL,PERIOD_M1,1,1,MODE_SMA,PRICE_OPEN,i)
                    );
//--- signal line counted in the 2-nd buffer
   SimpleMAOnBuffer(rates_total,prev_calculated,0,SignalSMA,ExtBuffer,ExtSignalBuffer);
//--- done
   return(rates_total);
  }
//+------------------------------------------------------------------+

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

 
Alexey Viktorov:

私見では、このやり方はまったく論理的ではありません。なぜ曜日を定義するのか?もし、「今日は○○件以上の注文を出さない」という条件であれば、日にちは関係ないのでしょうか?

今日オープンした注文をカウントして、それに対応する条件を指定する方が理にかなっているように思います。

受注開始日はございません。


知っている方は、やり方を書いてください)
ある日、一日中、n個以上の注文が 開かれないようにする方法がわかりません。

 
cripple:

よろしくお願いします。私はオフセット(iMANULLPERIOD_M111MODE_SMAPRICE_OPEN、i)の ために、更新後のすべての時間、for()ループを理解することはできません。)インジケーターが再描画される!


あらかじめご了承ください。

MAはTFが異なるので、上位のタイムフレームをM1のTFに合わせる、つまり異なるティック数でMAを2回カウントする必要があります。この場合、古い期間の同じ値が、若い期間の異なる値に加算されることになります。

i を通して見ると、例えば期間 D1 のローソク足が 10 本、M1 が 10 本出てきます。論理的に何かがおかしい...。

もうひとつ、インジケーターがM1にセットされていれば、ほとんどの場合、ブライシングをやり直さずに動作する。

 
Renat Akhtyamov:

MAは異なるTFを持っています。あなたは、M1のTFに上位のタイムフレームを合わせるようにしなければなりません、つまり、異なるティック数でMAを2回カウントします。

iを通過することにより、あなたは今、例えば期間D1の10本のローソク足と10本のM1を取っています。論理的に何かがおかしい...。

そうですね、でも私の頭では、どうすればM1が正しくカウントされるのか、まだ理解できていません。
 
cripple:
そうですね、でも私の頭では、どうすればM1が正しくカウントされるのか、まだ十分ではありません。

また、M5の1バーは必ずしもM1の5キャンドルに対応しないため、より高いタイムフレームでM1を同期させる必要があります、それは4または1であるかもしれません。

 
cripple:
そうですね、でも私の頭では、どうすればM1を正しくカウントできるのか、まだ理解できていません。

トライ

int  Bars(
   string           symbol_name,     // имя символа
   ENUM_TIMEFRAMES  timeframe,       // период
   datetime         start_time,      // с какой даты
   datetime         stop_time        // по какую дату
   );

i番目の小節の時間を表示し、iの代わりに結果の小節番号を表示する。

 
mt4ターミナルで、キーボードを使ってオープンペアをスクロールすることができるかどうか教えてください。
 
LRA:
novikov433 様 !!!プログラミングを教えるか、無料のExpert Advisorを書くか、その両方か! そのかわり、損切り注文が損切りに変換 される方法を教えてくれ。簡単な例で結構です。妻に、早朝に市場でバケツ一杯のジャガイモを買い、10時までに(ファンダメンタル分析)価格が上がる→売る、という注文(オーダー)を出すのです。でも、10時半にトラック一杯のジャガイモが届くこともあるんですよ(ニュース)。そして、(ニュースで)瞬時に価格が下がり、それがその日の終わりまで、あるいは1週間ずっと続くのです。ストップロスを設定し、価格が10ルーブル下がったら、できるだけ早く売る(市場価格で)。損失を避けるために、どのように順序を変更するか。ご興味のある方は、メールにてご連絡ください。
問題は、マーケットが要求側に少し行ってから戻ったので、ブレークイーブンで取引を終了し、リバースでオープンする必要があることです。でも、実際にトレードしてみると、やっぱり手持ちぶさただなあというのが実感です。
 
Alexey Viktorov:

トライ

i 番目の小節の時刻を取得し、i の代わりに結果の小節番号を格納する。


このようなことを考えたことはありますか?
//+------------------------------------------------------------------+
//|                                                         help.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+

#property copyright   "2005-2014, MetaQuotes Software Corp."
#property link        "http://www.mql4.com"
#property description "Moving Averages Convergence/Divergence"
#property strict
#include <MovingAverages.mqh>
//--- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 2
#property   indicator_color1  clrSilver
#property   indicator_color2  clrRed
#property   indicator_width1  2

//--- indicator parameters
input int SignalSMA=8;            // Signal SMA Period
//--- indicator buffers
double    ExtBuffer[];
double    ExtSignalBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(void)
  {
   IndicatorDigits(Digits+1);
//--- drawing settings
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexStyle(1,DRAW_LINE);
//--- indicator buffers mapping
   SetIndexBuffer(0,ExtBuffer);
   SetIndexBuffer(1,ExtSignalBuffer);

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence                           |
//+------------------------------------------------------------------+
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 i,limit;
//--- last counted bar will be recounted
   limit=rates_total-prev_calculated;
   if(prev_calculated>0)
      limit++;
//--- counted in the 1-st buffer
   for(i=0;i<limit;i++)
     {
      int bars=iBarShift(Symbol(),PERIOD_M1,iTime(Symbol(),PERIOD_CURRENT,i),false);
      ExtBuffer[i]=(
                    iMA(NULL,PERIOD_CURRENT,1,0,MODE_SMA,PRICE_HIGH,i)
                    +iMA(NULL,PERIOD_M1,1,1,MODE_SMA,PRICE_OPEN,bars)
                    );
      Print(bars);
     }
//--- signal line counted in the 2-nd buffer
   SimpleMAOnBuffer(rates_total,prev_calculated,0,SignalSMA,ExtBuffer,ExtSignalBuffer);
//--- done
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
ax00071:
ご清聴ありがとうございました ))取引自体は数時間前に終了している。さて、22:00になったら、Expert Advisorは、すでに決済されている注文を決済するための注文を出し始めた・・・。
植物とは名乗らないほうがいい。このようなエラーを発見し、理解し、修正することができたなら、あなたはプログラマーのレベルに近づいているのです!