そしてこの問題は、残念ながらコード上では完全には解決されていない。OHLCモデリングモード と "Every tick is based on real ticks "モードでEAが配置されていないシンボルから同じデータを受信することができるように解決する方法はありますか?一般的に、遅延のない同期でOHLCの問題を解決する方法、つまり、他のシンボルにまだバーがない場合、前のバーのデータを使用する方法はありますか?すべてのティックをチェックすれば、(まだ試していませんが)バーの最初のティックのデータを受け取り、同期を確認することができます。つまり、新しいチャートを開く瞬間に現在のチャートにバーがあったかどうかを知ることができます。
そしてこの問題は、残念ながら、コードでは完全には解決できない。OHLCシミュレーションモード と "Every tick based on real ticks "モードの両方で、EAが配置されていないシンボルから同じデータを受信することができるように解決する方法はありますか?一般的に、遅延のない同期でOHLCの問題を解決する方法、つまり、他のシンボルにまだバーがない場合、前のバーのデータを使用する方法はありますか?全ティックで確認するのであれば、バーの最初のティックのデータを受け取り、それを使って同期を確認する、つまり、新しいチャートが開くときに現在のチャートにバーがあったかどうかを知ることが可能です(試してませんが)。
//+------------------------------------------------------------------+//|Получение информации о ценах OHLC текущего бара |//+------------------------------------------------------------------+void Get_OHLC(string symbol,ENUM_TIMEFRAMES TF, double &arr_OHLC[])
{
ArrayResize(arr_OHLC,4);
arr_OHLC[0]=iOpen(symbol,TF,0);
arr_OHLC[3]=iOpen(symbol,PERIOD_M1,0);
datetime s=iTime(symbol,TF,0);
datetime f=iTime(symbol,PERIOD_M1,1);
datetime Time_1=iTime(Symbol(),PERIOD_M1,1);
if(TF!=PERIOD_M1)
{
double arr_High[];
double arr_Low[];
int copied=0;
if(Symbol()!=symbol)//Если берем данные с другого символа, то проверяем синхронизацию - нужно, так как при открытии новой свечи на текущем символе данных можнт небыть на опрашиваемом символе
{
if(Time_1>f)//На текущем символе открылись раньше появления нового бара на запрашиваемом
{
f=iTime(symbol,PERIOD_M1,0);
arr_OHLC[3]=iClose(symbol,PERIOD_M1,0);
}
else
{
arr_OHLC[3]=iClose(symbol,PERIOD_M1,1);
}
if(s>f)//Если текущий бар ТФ открылся раньше, чем минутный бар до которого включительно берем информацию OHLC
{
s=iTime(symbol,TF,1);
arr_OHLC[0]=iOpen(symbol,TF,1);
}
copied=CopyHigh(symbol,PERIOD_M1,s,f,arr_High);
if (copied>0)
{
arr_OHLC[1]=arr_High[ArrayMaximum(arr_High,0,WHOLE_ARRAY)];
}
else
{
Print("Ошибка копирования в массив arr_High");
}
copied=CopyLow(symbol,PERIOD_M1,s,f,arr_Low);
if (copied>0)
{
arr_OHLC[2]=arr_Low[ArrayMinimum(arr_Low,0,WHOLE_ARRAY)];
}
else
{
Print("Ошибка копирования в массив arr_Low");
}
}
else
{
if(s<f)
{
copied=CopyHigh(symbol,PERIOD_M1,s,f,arr_High);
if (copied>0)
{
arr_OHLC[1]=arr_High[ArrayMaximum(arr_High,0,WHOLE_ARRAY)];
}
else
{
Print("Ошибка копирования в массив arr_High");
}
copied=CopyLow(symbol,PERIOD_M1,s,f,arr_Low);
if (copied>0)
{
arr_OHLC[2]=arr_Low[ArrayMinimum(arr_Low,0,WHOLE_ARRAY)];
}
else
{
Print("Ошибка копирования в массив arr_Low");
}
}
else
{
if(s==f)//Если ТФ открылся на прошлом минутном баре
{
arr_OHLC[1]=iHigh(symbol,PERIOD_M1,1);
arr_OHLC[2]=iLow(symbol,PERIOD_M1,1);
}
if(s>f)//Если ТФ открылся на текущем минутном баре
{
arr_OHLC[1]=iOpen(symbol,PERIOD_M1,0);
arr_OHLC[2]=iOpen(symbol,PERIOD_M1,0);
}
}
}
}
else
{
arr_OHLC[0]=iOpen(symbol,PERIOD_M1,0);
arr_OHLC[1]=iOpen(symbol,PERIOD_M1,0);
arr_OHLC[2]=iOpen(symbol,PERIOD_M1,0);
arr_OHLC[3]=iOpen(symbol,PERIOD_M1,0);
if(Symbol()!=symbol)
{
if(Time_1>iTime(symbol,PERIOD_M1,1))//Если не появился новый бар
{
arr_OHLC[0]=iOpen(symbol,PERIOD_M1,0);
arr_OHLC[1]=iHigh(symbol,PERIOD_M1,0);
arr_OHLC[2]=iLow(symbol,PERIOD_M1,0);
arr_OHLC[3]=iClose(symbol,PERIOD_M1,0);
}
else//Если появился новый бар
{
arr_OHLC[0]=iOpen(symbol,PERIOD_M1,1);
arr_OHLC[1]=iHigh(symbol,PERIOD_M1,1);
arr_OHLC[2]=iLow(symbol,PERIOD_M1,1);
arr_OHLC[3]=iClose(symbol,PERIOD_M1,1);
}
}
}
}
そうです。同義語はfic、input、predictorです。
ありがとうございます。言葉は曲者ですが、私はいつも「もの」を持っています。
も厄介だ...。
私が思うに、最も正しい言葉は「 機能」ですが、同義語がたくさんあり、ベストではありません。
そうです。同義語はfic、input、predictorです。
ありがとうございます。言葉は曲がっていますが、私はいつも「フィッシュ」を持っています。
特に音訳に不慣れな場合は。
を選択した場合、バーが開くのはその商品のティックが発生した後です。長い間、ダニがいないかもしれない;-)
そしてこの問題は、残念ながらコード上では完全には解決されていない。OHLCモデリングモード と "Every tick is based on real ticks "モードでEAが配置されていないシンボルから同じデータを受信することができるように解決する方法はありますか?一般的に、遅延のない同期でOHLCの問題を解決する方法、つまり、他のシンボルにまだバーがない場合、前のバーのデータを使用する方法はありますか?すべてのティックをチェックすれば、(まだ試していませんが)バーの最初のティックのデータを受け取り、同期を確認することができます。つまり、新しいチャートを開く瞬間に現在のチャートにバーがあったかどうかを知ることができます。
そしてこの問題は、残念ながら、コードでは完全には解決できない。OHLCシミュレーションモード と "Every tick based on real ticks "モードの両方で、EAが配置されていないシンボルから同じデータを受信することができるように解決する方法はありますか?一般的に、遅延のない同期でOHLCの問題を解決する方法、つまり、他のシンボルにまだバーがない場合、前のバーのデータを使用する方法はありますか?全ティックで確認するのであれば、バーの最初のティックのデータを受け取り、それを使って同期を確認する、つまり、新しいチャートが開くときに現在のチャートにバーがあったかどうかを知ることが可能です(試してませんが)。
数分間の小節も見逃すかもしれません。直前の終値でバーを形成する。複数の楽器の共同動作の解析には問題ないでしょう。1つの通貨については、おそらく重要ではないでしょう。
OHLCでは前のバーが前となりますが、実際の取引ではその前のバーが前となる可能性があるため、このように非同期となります。
OHLCモードが非同期シンボル時系列であることを知らない人のために、MOのために重要な
トレーディング、自動売買システム、ストラテジーテストに関するフォーラム
MetaTrader 5 build 2615の新バージョン:Strategy Testerのファンダメンタル分析と複雑なクライテリアについて
アレクセイ・ヴャズミキン さん 2020.09.26 13:26
ビルド2622、1分足タイムフレーム、ツールSi-12.20ブローカー "Otkrytie"。
モード「Every tick based on real ticks」と「OHLC on M1」で新しいバーの開始時に印刷します。:
上記の結果が集計されているが、それについて質問がある。
1.私は、現在のシンボルの新しいバーがある場合、遅延が発生する可能性があることを期待したが、我々は情報を要求するシンボルのためにまだない - この状況は実際に発生しますが、唯一の新しい日のオープニングで - それは緑で強調表示されます。
2) マーキングがなければ1)と同じ状況ですが、ポティクテストで想定されているのであれば、なぜ「M1のOHLC」でこの状況が起こるのか、つまり脱同期が起こるのか、が不明 です。
3. 2つのティックを同時に受信した場合、または要求されたシンボルのティックが情報を呼び出したシンボルよりも速い場合、黄色でハイライトされます。しかし、ティックワイズモードで既に受信している場合、なぜ"OHLC on M1 " モードでこのバーにはティックがない のですか?
開発者にはっきり言ってもらうが、これは意図したことなのか、ではどういう理屈なのか、それともこれはバグで修正されるものなのか。
対応する。
トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム
MetaTrader 5 build 2615: ファンダメンタル分析と複雑な基準のストラテジーテスターの新機能
レナート・ファットフーリン, 2020.09.26 13:33
ご質問は、OHLCモードのテストについてのみですが、ポティッキーモードではすべて正しいので?
答えは簡単で、OHLCテストでは、外字の正確な同期を保証 することはできないからです。OHLCはダーティテスト専用です。
他のシンボルからデータを要求したときに、同期しない問題を解決したようです。いくつかのケースでは1分バーを犠牲にしなければなりませんでしたが、すべてのティックとOHLCでモデル化したときに安定した結果が得られ、これは実際の取引で同じことが期待できることを意味します。
通常のロバストなアルゴでは、多少のラグがあっても何の影響もありません。これらは遠大な問題である)。
この "普通 "のものはどこで手に入るのでしょうか?また、量子化の際に分位数間の境界線上にある場合、学習中に分位数1の差で実際の入力がスキップされるように見えることがありますが、これは影響するかしないかはランダムです。一般的に、閉じた日の取引がテスターで再現できないのは嫌なので、その原因を特定し、排除することに着手しました。