このインディケータが正しく動作するには、OnInit () で ArraySetSeries (mf, true) と (ms, true) が必要だと思います。
すべての演算子
if (flg == 0) / / initialise on first pass { ArrayInitialize (ag, EMPTY_VALUE); ArrayInitialize (bg, EMPTY_VALUE); ArrayInitialize (cg, EMPTY_VALUE); hi = 0; I = 0; trend = 0; flg = 1; }
すべての演算子はOnInit()でより効果的であり、 "flg "を使用する必要はありません。
MACDを使ったEAのアルゴリズムは次のように単純化されていると思います:
買いを開く:MACDcurrent>MACDprev && MACDcurrent<0; buyed = true.
クローズ買い:buyed && MACDcurrent<MACDprev && MACDcurrent>0; buyed = false。
売りの逆張り。
EAを操作していない時にSLとTPを使用すれば、トレンド(スローMA)に合わせて「買い」または「売り」と言うことができ、新しいシグナルを待つことができます。
このインジケーター:madelta_inc.mq5 をチャートにつけても何も描画されません。画像を添付しますので、ご覧ください。また、josemiguel1812が 提案している、フラグ: 'flg'を使用せず、コードの一部をOnInit()イベントに移動させるという変更を加えたコードを以下に掲載します。私は使っていない:ArraySetAsSeries (mf, true)とArraySetAsSeries (ms, true)は使いませんでした。なぜなら、'mf'と'ms'はどちらも1つの要素しかない配列であり、この変更は効果がないと思うからです。しかし、私が知りたいのは、なぜインジケータの線が描画されないのかということです。以下のコードを試してテストしていただけますか?
よろしくお願いします。
//+------------------------------------------------------------------+ //|マデルタ・インク //|著作権 2013 ウィンストン //+------------------------------------------------------------------+ #property copyright "Winston 2013" #property version "1.10" #property description "madelta_inc" #property indicator_separate_window #property indicator_buffers 4 #property indicator_plots 3 #property indicator_type1 DRAW_COLOR_LINE #property indicator_color1 White,Yellow,Red #property indicator_style1 STYLE_SOLID #property indicator_width1 2 #property indicator_type2 DRAW_LINE #property indicator_color2 Yellow #property indicator_style2 STYLE_DOT #property indicator_width2 1 #property indicator_type3 DRAW_LINE #property indicator_color3 Red #property indicator_style3 STYLE_DOT #property indicator_width3 1 input double d = 0.00195; //delta input double m = 39.2; //mult input int F = 26; //高速移動平均 input ENUM_MA_METHOD FM = MODE_SMA; //高速平均モード input ENUM_APPLIED_PRICE FP = PRICE_WEIGHTED; //ファーストプライスモード input int S = 51; //低速移動平均 input ENUM_MA_METHOD SM = MODE_EMA; // 低速平均モード input ENUM_APPLIED_PRICE SP = PRICE_MEDIAN; //スロープライスモード int Ms, Mf, trend; double px, hi, lo; double ms[1], mf[1]; double ag[], bg[], cg[], ac[]; //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ void OnInit() { SetIndexBuffer(0, ag, INDICATOR_DATA); ArraySetAsSeries(ag, true); //シグナル SetIndexBuffer(1, ac, INDICATOR_COLOR_INDEX); ArraySetAsSeries(ac, true); //シグナル・トレンド・カラー SetIndexBuffer(2, bg, INDICATOR_DATA); ArraySetAsSeries(bg, true); //閾値 SetIndexBuffer(3, cg, INDICATOR_DATA); ArraySetAsSeries(cg, true); //閾値 ArrayInitialize(ag, EMPTY_VALUE); ArrayInitialize(bg, EMPTY_VALUE); ArrayInitialize(cg, EMPTY_VALUE); hi = 0; lo = 0; trend = 0; Mf = iMA(NULL, PERIOD_H1, F, 0, FM, FP); Ms = iMA(NULL, PERIOD_H1, S, 0, SM, SP); } //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, // 価格[]配列のサイズ const int prev_calculated, // 前の呼び出しで処理されたバー const int begin, // 重要なデータがどこから始まるか const double &price[]) // 計算する配列 { CopyBuffer(Mf, 0, 0, 1, mf); //高速移動平均値 CopyBuffer(Ms, 0, 0, 1, ms); // 低速移動平均値 px = pow(m * (mf[0] - ms[0]), 3); // 差を増幅して立方体にする if (px > hi) { //トレンドの特定 hi = px; lo = hi - d; trend = 1; } if (px < lo) { //色の変化を伴う lo = px; hi = lo + d; trend = 2; } ag[0] = px; bg[0] = hi; cg[0] = lo; ac[0] = trend; return (rates_total); } //+------------------------------------------------------------------+
このインジケーター:madelta_inc.mq5 をチャートにつけても何も描画されません。画像を添付しますので、ご覧ください。また、josemiguel1812が 提案している、フラグ: 'flg'を使用せず、コードの一部をOnInit()イベントに移動させるという変更を加えたコードを以下に掲載します。私は使っていない:ArraySetAsSeries (mf, true)とArraySetAsSeries (ms, true)は使いませんでした。なぜなら、'mf'と'ms'はどちらも1つの要素しかない配列であり、この変更は効果がないと思うからです。しかし、私が知りたいのは、なぜインジケータの線が描画されないのかということです。以下のコードを試してテストしていただけますか?
よろしくお願いします。
何を期待しているのですか?インジケータのバッファのインデックス0の値のみが設定されます。
バッファのインデックス0が常に代入されているのを見て少し混乱したので、ArraySetAsSeriesが何らかの影響を及ぼして、直感的に考えられる動作(逆)を変えるとか、そういうことを期待していたのですが、私はmql5の初心者です。とにかく、他の理由でコンピュータを再起動しなければならなくなり、インジケータを再度試してみたところ、今では最初に期待したとおりの線が描画される ようになりました。画像を添付します。
ありがとうございました。
ArraySetAsSeriesは、直感的な動作(逆)を変更するような影響があるのではと期待していたのですが、私はmql5の初心者です。とにかく、他の理由でコンピュータを再起動しなければならなくなり、インジケータを再度試してみたところ、今では最初に期待したとおりの線が描画される ようになりました。画像を添付します。
Cyberglassedさん、ありがとうございます。
あなたが実行しているコードがあなたが投稿したものと同じでないか、あなたのターミナルがいくつかのバッファから来るデータを描画しているかのどちらかです。
あなたが投稿したコードではそのような結果は得られません。
コメントありがとうございます。このインジケーターは、ストラテジーテスターの Visulizationモードでのみ動作するように意図されているという点で、珍しいかもしれません。
ナビゲーターでEAを左クリックし、testを右クリックします。 ストラテジーテスターEURUSDのH1で、Visulizationにチェックを入れ、Startするとインジケーターが表示されるはずです。
どうなったか教えてください。
よろしくお願いします。
ウィンストン
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
2つの移動平均の差:
2つの移動平均値の差に基づいたエキスパートアドバイザー
作者: Winston