//+------------------------------------------------------------------+//| ATR.mq4 |//| Copyright 2005-2014, MetaQuotes Software Corp. |//| https://www.mql4.com |//+------------------------------------------------------------------+#property copyright"2005-2014, MetaQuotes Software Corp."#property link"https://www.mql4.com"#property description"Average True Range"#property strict//--- indicator settings#property indicator_separate_window#property indicator_buffers1#property indicator_color1 DodgerBlue
//--- input parameterinputint InpAtrPeriod=14; // ATR Period//--- buffersdouble ExtATRBuffer[];
double ExtTRBuffer[];
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit(void)
{
string short_name;
//--- 1 additional buffer used for counting.
IndicatorBuffers(2);
IndicatorDigits(Digits);
//--- indicator line
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtATRBuffer);
SetIndexBuffer(1,ExtTRBuffer);
//--- name for DataWindow and indicator subwindow label
short_name="ATR("+IntegerToString(InpAtrPeriod)+")";
IndicatorShortName(short_name);
SetIndexLabel(0,short_name);
//--- check for input parameterif(InpAtrPeriod<=0)
{
Print("Wrong input parameter ATR Period=",InpAtrPeriod);
return(INIT_FAILED);
}
//---
SetIndexDrawBegin(0,InpAtrPeriod);
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Average True Range |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
int i,limit;
//--- check for bars count and input parameterif(rates_total<=InpAtrPeriod || InpAtrPeriod<=0)
return(0);
//--- counting from 0 to rates_totalArraySetAsSeries(ExtATRBuffer,false);
ArraySetAsSeries(ExtTRBuffer,false);
ArraySetAsSeries(open,false);
ArraySetAsSeries(high,false);
ArraySetAsSeries(low,false);
ArraySetAsSeries(close,false);
//--- preliminary calculationsif(prev_calculated==0)
{
ExtTRBuffer[0]=0.0;
ExtATRBuffer[0]=0.0;
//--- filling out the array of True Range values for each periodfor(i=1; i<rates_total; i++)
ExtTRBuffer[i]=MathMax(high[i],close[i-1])-MathMin(low[i],close[i-1]);
//--- first AtrPeriod values of the indicator are not calculateddouble firstValue=0.0;
for(i=1; i<=InpAtrPeriod; i++)
{
ExtATRBuffer[i]=0.0;
firstValue+=ExtTRBuffer[i];
}
//--- calculating the first value of the indicator
firstValue/=InpAtrPeriod;
ExtATRBuffer[InpAtrPeriod]=firstValue;
limit=InpAtrPeriod+1;
}
else
limit=prev_calculated-1;
//--- the main loop of calculationsfor(i=limit; i<rates_total; i++)
{
ExtTRBuffer[i]=MathMax(high[i],close[i-1])-MathMin(low[i],close[i-1]);
ExtATRBuffer[i]=ExtATRBuffer[i-1]+(ExtTRBuffer[i]-ExtTRBuffer[i-InpAtrPeriod])/InpAtrPeriod;
}
//--- return value of prev_calculated for next callreturn(rates_total);
}
//+------------------------------------------------------------------+
MetaTrader 5のATR.mq5を例にとると、96行になります。
//+------------------------------------------------------------------+//| ATR.mq5 |//| Copyright 2009, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"2009, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property description"Average True Range"//--- indicator settings#property indicator_separate_window#property indicator_buffers2#property indicator_plots1#property indicator_type1 DRAW_LINE#property indicator_color1 DodgerBlue
#property indicator_label1 "ATR"//--- input parametersinputint InpAtrPeriod=14; // ATR period//--- indicator buffersdouble ExtATRBuffer[];
double ExtTRBuffer[];
//--- global variableint ExtPeriodATR;
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+voidOnInit()
{
//--- check for input valueif(InpAtrPeriod<=0)
{
ExtPeriodATR=14;
printf("Incorrect input parameter InpAtrPeriod = %d. Indicator will use value %d for calculations.",InpAtrPeriod,ExtPeriodATR);
}
else ExtPeriodATR=InpAtrPeriod;
//--- indicator buffers mappingSetIndexBuffer(0,ExtATRBuffer,INDICATOR_DATA);
SetIndexBuffer(1,ExtTRBuffer,INDICATOR_CALCULATIONS);
//---IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//--- sets first bar from what index will be drawnPlotIndexSetInteger(0,PLOT_DRAW_BEGIN,InpAtrPeriod);
//--- name for DataWindow and indicator subwindow labelstring short_name="ATR("+string(ExtPeriodATR)+")";
IndicatorSetString(INDICATOR_SHORTNAME,short_name);
PlotIndexSetString(0,PLOT_LABEL,short_name);
//--- initialization done
}
//+------------------------------------------------------------------+//| Average True Range |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
int i,limit;
//--- check for bars countif(rates_total<=ExtPeriodATR)
return(0); // not enough bars for calculation//--- preliminary calculationsif(prev_calculated==0)
{
ExtTRBuffer[0]=0.0;
ExtATRBuffer[0]=0.0;
//--- filling out the array of True Range values for each periodfor(i=1;i<rates_total && !IsStopped();i++)
ExtTRBuffer[i]=MathMax(high[i],close[i-1])-MathMin(low[i],close[i-1]);
//--- first AtrPeriod values of the indicator are not calculateddouble firstValue=0.0;
for(i=1;i<=ExtPeriodATR;i++)
{
ExtATRBuffer[i]=0.0;
firstValue+=ExtTRBuffer[i];
}
//--- calculating the first value of the indicator
firstValue/=ExtPeriodATR;
ExtATRBuffer[ExtPeriodATR]=firstValue;
limit=ExtPeriodATR+1;
}
else limit=prev_calculated-1;
//--- the main loop of calculationsfor(i=limit;i<rates_total && !IsStopped();i++)
{
ExtTRBuffer[i]=MathMax(high[i],close[i-1])-MathMin(low[i],close[i-1]);
ExtATRBuffer[i]=ExtATRBuffer[i-1]+(ExtTRBuffer[i]-ExtTRBuffer[i-ExtPeriodATR])/ExtPeriodATR;
}
//--- return value of prev_calculated for next callreturn(rates_total);
}
//+------------------------------------------------------------------+
まあ、普通のプログラマーが直面するような苦労を、作り手は見ていないのかもしれませんね。
例えば、私は大学ではBASICを勉強していましたが、それ以外は何もしていませんでした。mql4が好きで自分で勉強していたこともあり、今は特に問題ないです。mql5を使おうとしたとき、mql5 indicator hatと一緒に100行に満たない簡単なインジケータを一つ書きました。この差は大きいと思います。
これは神話であり、あなたはそれを知っている。
MetaTrader 4の標準的なATR.mq4を取り上げてみましょう。そこには104本の線がある。
MetaTrader 5のATR.mq5を例にとると、96行になります。
104行と96行ではサイズに差がなく、MQL5側にアドバンテージがあるくらいです。
そうやって、人々は無意味なことや神話をフォーラムからフォーラムへと移していくのです。
言語が同じという意味では全くありません。
違いはごく一部の機能だけであり(MT5の方が優れている)、使いこなすために大きなコストはかからない。
時間を無駄にしたくない」「昨日までに必要」ということについては、トレーディングプラットフォームはトレーダーの効率を上げるための重要なツールであることを思い出してほしい。明らかにもっと効果的で機能的な解決策があるのに、それを使わないのは、神話を捏造した自傷行為であり、自己欺瞞である。
取引戦略のテスターを比較すると、MT4のことを永遠に忘れてしまうほどです。冗談でもなく、大袈裟でもなく、現実なんです。
MT5のポジション集計の最も愚かな原理(これは、1つのシンボルと1つの口座で複数のMTSの同時操作をトリックなしで制限することが不可能であることを意味します)は、MT5での取引を永遠に思いとどまらせています。MT5を提供するブローカーが、手のひらの指の数よりも多くなるときでさえも。
また、テスターのためだけにMT5用のコードを書き換えるなど、申し訳ありませんが、無茶な話です。
MT5のポジション集計の最も愚かな原則(つまり、1つのシンボルと1つの口座で複数のMTSの同時操作をトリックなしで制限することが不可能)は、MT5での取引を永遠に思いとどまらせています。MT5をリアルで提供するブローカーが手の指の数より多くなるときでさえ。
まったく不条理なことではありません。
メリットは何度も説明しているので、繰り返したくない。また、「1つのシンボルに複数のMTSを搭載することは自滅であり、損失であり、大量利用には非現実的な状況である」理由も繰り返し説明してきました。
また、テスターのためだけにMT5用のコードを書き換えるというのは、申し訳ないですが、無茶な話です。
不条理ではありません。
自ら機会を減らし、発展のチャンスを逃しているのです。より良い、より機能的で強力なシステムが、欠陥だらけの古いシステムより悪いと、自分自身や他の人に証明することは、自分自身を直接傷つけることになります。
全然違うというのは、言葉が同じということです。
違いはごく一部の機能だけであり(MT5ではそれが優れている)、使いこなすために大きなコストはかからない。
時間を無駄にしたくない」「昨日までに必要」ということについては、トレーディングプラットフォームはトレーダーの効率を上げるための重要なツールであることを思い出してほしい。近くにもっと効果的で機能的な解決策があることがわかっていながら、それを使わないのは、自分を傷つけ、作り出された神話で自分を欺いていることになります。
取引戦略のテスターを比較すると、MT4のことを永遠に忘れてしまうほどです。冗談でもなく、大袈裟でもなく、現実なんです。
これは神話であり、あなたはそれを知っている。
MetaTrader 4の標準的なATR.mq4を取り上げてみましょう。そこには104本の線がある。
MetaTrader 5のATR.mq5を例にとると、96行になっています。
104行と96行のサイズに差はなく、アドバンテージさえもMQL5に軍配が上がります。
そうやって、人々は無意味なことや神話をフォーラムからフォーラムへと移していくのです。
質問ですが、mql4で同じインジケータを書くのに1時間かかり、mql5で同じコードを書くのをマスターするのに1週間かかったのですが...。引用の数ではなく、プログラミングのアプローチへの理解......。
mql4で標準インジケータの値を取得する機能は、mql5の同機能とどの程度違うのでしょうか...。対処しているときに、気が狂いそうになったことがあります。もちろん、プログラミングの講座を開くことはできますが、そのような講座に行くことができないかもしれない他の要因も考えなければなりません...。そして、費用や年齢、会場からの距離やオンライン学習の場合の交通費など・・・。分からないものですね...。
Renatさん、mt4テスターとmt5テスターを同じにするのは難しいのですか?
カルテットには触れず、MQL5.communityとの連携というサービス部分のみとします。
そうではなく、mql4で同じインジケータを1時間で書き、mql5で同じコードを書く方法を学ぶのに1週間かかったと言いたかったのです......。引用の数ではなく、プログラミングのアプローチへの理解......。
mql4でカスタムインジケータの値を取得する機能は、mql5の同機能とどの程度違うのでしょうか ...私はそれを理解するために、ほとんど気が狂いそうでした。もちろん、プログラミングの講座を開くことはできますが、そのような講座に行くことができないかもしれない他の要因も考えなければなりません...。そして、費用や年齢、会場からの距離やオンライン学習の場合の交通費など・・・。分からないものですね...。
2つのファイルを比較すると、最小限の違いがあることがわかると思います。
コツをつかむのに1週間、発狂しそうになった」についてですが、掲示板では赤文字になっていますね。神話はこうして生まれる
ただ、その中の言語があまりにも違うので、使いこなすには少なからず時間がかかる。
2つのファイルを比較すると、最小限の違いがあることがわかります。
コツをつかむのに1週間、発狂しそうになった」は、まさに掲示板の赤文字系フレーズ。神話はこうして生まれる