HELP!!MT4からMT5へインジケーターを変換する。 - ページ 5

 

こんにちは、私はmql4からmql5へのインジケータを変換 しようとしています。基本的には、赤いバーが表示されたときに、MFIで音で通知してくれればいいのです。今、このサウンドコードを新しいmfiに取り付けるにはどうしたらいいのでしょうか?

旧作動バージョンの例を添付しました。

ファイル:
 

正しい方法を教えてください、これはヒーケン・アシ計算です

スタンダードからの切り抜きです

for(i=pos/*pos=1*/; i<rates_total ;i++)
  {
   haOpen=(ExtOpenBuffer0[i-1]+ExtCloseBuffer0[i-1])/2; // <<<
   haClose=(Open[i]+High[i]+Low[i]+Close[i])/4;
   haHigh=MathMax(High[i],MathMax(haOpen,haClose));
   haLow=MathMin(Low[i],MathMin(haOpen,haClose));

Openは 前のバーで検索されるべきなのに、なぜコードの次のバーで検索されるのだろうという疑問が湧いてくる。

おそらくこの方法で正しいのか、それとも私が何か誤解しているのか。

haOpen=(ExtOpenBuffer0[i+1]+ExtCloseBuffer0[i+1])/2;
ありがとうございました。
 
Vitaly Muzichenko:

正しい方法を教えてください、これはヒーケン・アシ計算です

スタンダードからの切り抜きです

for(i=pos/*pos=1*/; i<rates_total ;i++)
  {
   haOpen=(ExtOpenBuffer0[i-1]+ExtCloseBuffer0[i-1])/2; // <<<
   haClose=(Open[i]+High[i]+Low[i]+Close[i])/4;
   haHigh=MathMax(High[i],MathMax(haOpen,haClose));
   haLow=MathMin(Low[i],MathMin(haOpen,haClose));

Openは 前のバーで検索されるべきなのに、なぜコードの次のバーで検索されるのだろうという疑問が湧いてくる。

これは正しいに違いない、それとも私が何かを誤解しているのだろうか?

haOpen=(ExtOpenBuffer0[i+1]+ExtCloseBuffer0[i+1])/2;
ありがとうございました。
mql5では、バーインデックスの方向は デフォルトで行われます。したがって、[i-1]はちょうど右側の最初の小節になります。
 
Vitaly Muzichenko:

正しい方法を教えてください、これはヒーケン・アシ計算です

スタンダードからの切り抜きです

for(i=pos/*pos=1*/; i<rates_total ;i++)
  {
   haOpen=(ExtOpenBuffer0[i-1]+ExtCloseBuffer0[i-1])/2; // <<<
   haClose=(Open[i]+High[i]+Low[i]+Close[i])/4;
   haHigh=MathMax(High[i],MathMax(haOpen,haClose));
   haLow=MathMin(Low[i],MathMin(haOpen,haClose));

Openは 前のバーで検索されるべきなのに、なぜコードの次のバーで検索されるのだろうという疑問が湧いてくる。

おそらく正しい方法なのか、それとも私が何か誤解しているのか。

haOpen=(ExtOpenBuffer0[i+1]+ExtCloseBuffer0[i+1])/2;
ありがとうございました。

チャートの一番右と一番左の棒がどの指数なのかを正確に知るには、次のような簡単な方法があります。

どのインディケータでも、MetaEditorで、OnCakculate()内の最初の操作でブレークポイントを置く(ステップ1)。

索引検査

過去データでデバッグを開始する。ブレークポイントでデバッグを開始すると同時に、デバッグが一時停止されます。そして、"time[rates_total-1]" と "time[0]" という2つの式を観測に追加します(ステップ2、3)。さて、この状況(time[]配列のインデックスの方向が デフォルトで、ArrayAsSeriesが適用されていない)において、要素time[rates_total-1]がグラフの一番右のバーになることが簡単にわかります(ステップ4)。

この単純明快な方法が、インジケータにおけるインデックスの方向性を素早く確認するための一助となれば幸いです。

 
Alexey Viktorov:
mql5では、バーインデックスの方向はデフォルトで行われます。したがって、[i-1]は右から1番目の小節になります。

大まかに理解できたので、ArraySetAsSeriesの使い 方を忘れないようにします。

問題は、mql4とmql5の両方のコードで、同じ「i-1」計算が適用されていることです。式に未来のバーではなく、前のバーと書いてあるのに、なぜ減算するのですか?

ウラジーミル・カルプトフ

チャートの右端と左端のバーがどのインデックスなのかを正確に知るには、次のような簡単な方法があります。

どのインディケータでも、MetaEditorで、OnCakculate()内の最初の操作でブレークポイントを置く(ステップ1)。

過去データでデバッグを開始する。ブレークポイントでデバッグを開始すると同時に、デバッグが一時停止されます。そして、"time[rates_total-1]" と "time[0]" という2つの式を観測に追加します(ステップ2、3)。さて、この状況(time[]配列のインデックスの方向がデフォルトで、ArrayAsSeriesが適用されていない)において、要素time[rates_total-1]がグラフの一番右のバーになることが簡単にわかります(ステップ4)。

この単純明快な方法が、指標における指標の方向性を素早く確認するための一助となれば幸いです。

ありがとうございます、意識していませんでした。

計算の正しさについて、何かご指摘はありますか?

 
こんにちは。
CCI ARROWSインジケーターのアラートを作りたいのですが。
矢印が表示されたら、すぐに信号を出してほしい。
MT5
 

みなさん、こんにちは!!!MT5でインジケーターを改造し始めたのですが、iTimeの関数が 理解できず、動作させることができません、どなたかインジケーターを動作する状態にドーピングしていただけないでしょうか?

インジケーターが読み込むファイルは、MQL5 ⇄Files⇄evolution-dvoid⇄フォルダー内にあります。

ダウンロード後、.csvにリネームしてください。

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

ファイル:
 

私はプログラマーではありませんが、友人の一人が、Bill Williams'Market Facilitation Index(BW MFI)のコードでは、計算が古典的な式に厳密に従って 行われていない、と言っています。 bw mfi = (高-低) / ボリューム さらに、いくつかの追加データ補正が行われます。これは実際にはエラーであり、その結果、インジケータ 不正確なデータを表示する!

インジケーターのこのエラーを修正する方法(追加データの補正を削除する)をアドバイスしていただき、受信してください。
式に忠実に動作するインジケータです。bw mfi = (high - low) / volume ?・・・・・・・?


//+------------------------------------------------------------------+

//|MarketFacilitationIndex.mq5||MarketFacilitationIndex.

//| 著作権 © 2009, MetaQuotes Software Corp.

//| http://www.mql5.com |

//+------------------------------------------------------------------+

#property copyright "2009, MetaQuotes Software Corp.

#プロパティリンク "http://www.mql5.com"

//--- インジケータ設定

#property indicator_separate_window

#property indicator_buffers 2

#property indicator_plots 1

#property indicator_type1 DRAW_COLOR_HISTOGRAM

#property indicator_color1 ライム、サドルブラウン、ブルー、ピンク

#property indicator_width1 2

//--- 入力パラメータ

input ENUM_APPLIED_VOLUME InpVolumeType=VOLUME_TICK; //volumes

//---- バッファ

double ExtMFIBuffer[];

double ExtColorBuffer[];

//+------------------------------------------------------------------+

//| カスタムインジケータ初期化関数

//+------------------------------------------------------------------+

void OnInit()

{

//---- インジケータ

SetIndexBuffer(0,ExtMFIBuffer,INDICATOR_DATA)を設定します。

SetIndexBuffer(1,ExtColorBuffer,INDICATOR_COLOR_INDEX)を設定します。

//--- DataWindowの名前

IndicatorSetString(INDICATOR_SHORTNAME, "BWMFI");

//--- 精度を設定する

IndicatorSetInteger(INDICATOR_DIGITS,_Digits)です。

//----

}

//+------------------------------------------------------------------+

//||

//+------------------------------------------------------------------+

void CalculateMFI(const int start,const int rates_total,

const double &high[],

const double &low[],

const long &volume[])

{

int i=start;

mfi_up=true、vol_up=true。

//--- mfi_up と vol_up の最初の値を計算する。

if(i>0)

{

int n=iとする。

while(n>0)

{

if(ExtMFIBuffer[n]>ExtMFIBuffer[n-1]) { mfi_up=true; break; }.

if(ExtMFIBuffer[n]<ExtMFIBuffer[n-1]) { mfi_up=false; break; }.

//--- mfiの値が等しければ続ける

n--;

}

n=iです。

while(n>0)

{

if(volume[n]>volume[n-1]) { vol_up=true; break; }.

if(volume[n]<volume[n-1]) { vol_up=false; break; }.

//--- 実量が同じなら続ける

n--;

}

}

//---

while(i<rate_total && !IsStopped())

{

if(ボリューム[i]==0)

{

if(i>0) ExtMFIBuffer[i]=ExtMFIBuffer[i-1];

else ExtMFIBuffer[i]=0;

}

else ExtMFIBuffer[i]=(high[i]-low[i])/_Point/volume[i];

//--- 変化を計算する

if(i>0)

{

if(ExtMFIBuffer[i]>ExtMFIBuffer[i-1]) mfi_up=true;

if(ExtMFIBuffer[i]<ExtMFIBuffer[i-1]) mfi_up=false;

if(volume[i]>volume[i-1]) vol_up=true;

if(volume[i]<volume[i-1]) vol_up=false;

}

//--- 色を設定する

if(mfi_up && vol_up) ExtColorBuffer[i]=0.0;

if(!mfi_up && !vol_up) ExtColorBuffer[i]=1.0;

if(mfi_up && !vol_up) ExtColorBuffer[i]=2.0;

if(!mfi_up && vol_up) ExtColorBuffer[i]=3.0;

i++;

}

}

//+------------------------------------------------------------------+

//| カスタムインジケータ反復関数

//+------------------------------------------------------------------+

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 start=0;

//---

if(start<prev_calculated) start=prev_calculated-1;

//--- ティックまたはリアルボリュームで計算する

if(InpVolumeType==VOLUME_TICK)とする。

CalculateMFI(start,rates_total,high,low,tick_volume)を実行。

さもなくば

CalculateMFI(start,rates_total,high,low,volume)を実行。

//--- 最後のmfiの値を正規化する

if(rates_total>1)

{

datetime ctm=TimeTradeServer(),lasttm=time[rates_total-1],nexttm=lasttm+datetime(PeriodSeconds());

if(ctm<nexttm && ctm>=lasttm && nexttm!=lasttm)

{

double correction_koef=double(1+ctm-lasttm)/double(nexttm-lasttm);

ExtMFIBuffer[rates_total-1]*=correction_koef;

}

}

//---

return(rates_total);

}

//+------------------------------------------------------------------+

 

これはどのようなコードで、これをMT5のインジケーターにするにはどうしたらいいのか、教えてください。


//これはボリュームベースのインジケータです。適切な音量で入力するようにしましょう。


//スクワットバーは、売り買いは多いが値動きが少ない、強気と弱気の戦いである。
//スクワットバーは、トレンドの終わりには85%の確率で上位3本または下位3本のうちの1本になります。
//すべてのトレンドはスクワットで終わりますが、すべてのスクワットはトレンドの終わりではありません。

study("Williams Squat Bars", shorttitle="Squat Bars", overlay=true)。
r_hl=roc((high-low)/volume,1)
r_v=roc(ボリューム,1)
squat_f=(r_hl<0)かつ(r_v>0)
バーカラー(squat_f ? blue : na)
 
Olexiy Polyakov:

これはどのようなコードで、これをMT5のインジケータにするにはどうしたらいいのか教えてください。


//これはボリュームベースのインジケータです。適切な音量で入力するようにしましょう。


//スクワットバーは、売り買いは多いが値動きが少ない、強気と弱気の戦いである。
//スクワットバーは、トレンドの終わりには85%の確率で上位3本または下位3本のうちの1本になります。
//すべてのトレンドはスクワットで終わりますが、すべてのスクワットはトレンドの終わりではありません。

study("Williams Squat Bars", shorttitle="Squat Bars", overlay=true)。
r_hl=roc((high-low)/volume,1)
r_v=roc(ボリューム,1)
squat_f=(r_hl<0)かつ(r_v>0)
バーカラー(squat_f ? blue : na)

BW MFI スクワットバー、3バッファー(記憶が確かなら)