多通貨のExpert Advisorを構築しようとしています。今のところ、Nikolay Kositsin氏の記事「Creating Expert Advisor that trades on different symbols」で提案されている方式に決定しています。同じパラメータで異なるシンボルを使用してテストを実行すると、結果が異なるという問題に直面しました。フォーラムをスクロールしてみると、多くの人がOnTimer() 関数を使うことでこの問題を解決できるという結論に達していることがわかりました。Andrey Khatimlanskyがここで アドバイスしてくれました。
Отвяжитесь от тиков конкретного инструмента (OnTick) - это же мультивалютник! Работайте по таймеру или ловите момент образования бара на всех рабочих инструментах, это будет надежнее.
すべての楽器でバー形成の瞬間をとらえようとしたが、思うようにいかなかった。
例えば、こんな感じです。
新しいバーを検出するための関数では、機器とタイムフレームを明示的に指定しています。
bool isNewBar(string Symbol_, ENUM_TIMEFRAMES Timeframe)
{
// В статической переменной будем помнить время открытия последнего бараstaticdatetime last_time = 0;
// Текущее времяdatetime lastbar_time = (ENUM_SERIES_INFO_INTEGER)SeriesInfoInteger(Symbol_,Timeframe,SERIES_LASTBAR_DATE);
// Если это первый вызов функцииif(last_time == 0)
{
// Установим время и выйдем
last_time = lastbar_time;
return(false);
}
// Если время отличаетсяif(last_time != lastbar_time)
{
// Запомним время и вернем true
last_time = lastbar_time;
return(true);
}
// Дошли до этого места - значит бар не новый, вернем falsereturn(false);
}
voidOnTick()
{
// Объявление массивов переменных для торговых сигналов staticbool UpSignal[2], DnSignal[2];
// Получение торговых сигналов
TradeSignalCounter(0, остальные параметры);
TradeSignalCounter(1, остальные параметры);
// Совершение торговых операций
TradePerformer(0, остальные параметры);
TradePerformer(1, остальные параметры);
}
無条件で愚かな(無知からの)指標の再作成を、知的な(稀で必要な)指標の作成 と混同しないでください。前者では百害あって一利なし、後者では完璧な仕事ができる。
カールソンが 無知なために過ちを犯したことは十分承知していますし、その過ちの内容も理解しています。
しかし、彼の問題を解決するための合理的なスキームを提案する。インジケータに記述されたコードを使用する必要がありますが、このコードのパラメータは、インジケータデータにアクセスする前に動的に決定されるのでしょうか?
私は解決策を持っています、それはdllを含んでいますが、あなたは純粋なmqlを使用したいので、mqlの解決策を提供してください。
HZ OnCalculate()とイベントでの計算については既に述べましたが、イベント経由で3つのパラメータを渡すことができます。私のソリューションでは、long dllはパラメータで配列のアドレスを渡すことができ、インジケータはこのアドレスでデータを受け取ります。
mqlのソリューションがあれば、指をさすだけです。
カールソンが 無知なために過ちを犯したことは十分承知していますし、その過ちの内容も理解しています。
しかし、彼の問題を解決するための合理的なスキームを提案する。インジケータに書かれたコードを使用する必要がありますが、このコードのパラメータは、インジケータ・データを参照する前に動的に決定されるのでしょうか?
現実には何種類の指標を作ればいいのか?おそらく10個以内でないと、無意味な資源の浪費になります。
パラメータの変更がないため、インジケータのコレクションを作成しておけば、必要なときに必要なものが追加されます。もし、指標が10個以下で、明確な意味(初期、確認、修正など)がある場合は、必要なパラメータでハンドルの名前付き変数を作成することができます。
しかし、彼の問題を解決するための合理的なスキームを提案する。インジケータに書かれたコードを使用する必要がありますが、このコードのパラメータは、インジケータ・データを参照する前に動的に決定されるのでしょうか?
少し考えてみました。コードパラメータを指標データの呼び出し毎に動的に決定するのであれば、その決定手順も指標コードに含めてはどうでしょうか。つまり、すべての計算をインジケータに実装する必要があります。
それとも、そのようなアプローチが原理的に不可能な場合があるのでしょうか?
前々から思っていたんです。指標データを使用する前にコードパラメータを動的に決定するのであれば、その決定手順を指標コードに含めてはどうでしょうか。つまり、すべての計算をインジケータに実装する必要があります。
それとも、そのようなアプローチが原理的に不可能な場合があるのでしょうか?
他の指標で計算されたパラメータをExpert Advisorに返し、Expert Advisorがニューロニックに基づいてどのモデルを使用するかを決定する場合があります。どのようなパラメータが適用されるかは、事前にはわからない。
このようなシンプルなインジケータにおいて、週足 グラフ以外の すべての場所でゼロ(右から1番目)のバーが計算されないのはなぜか、教えていただけませんか?
おっと、ここでSimpleMAOnBuffer(e,prev_calculated,PERIOD+1,p,vect,mabuf);の代わりにe - rates_totalで全てうまくいきました) を置換した。)
多通貨のExpert Advisorを構築しようとしています。今のところ、Nikolay Kositsin氏の記事「Creating Expert Advisor that trades on different symbols」で提案されている方式に決定しています。同じパラメータで異なるシンボルを使用してテストを実行すると、結果が異なるという問題に直面しました。フォーラムをスクロールしてみると、多くの人がOnTimer() 関数を使うことでこの問題を解決できるという結論に達していることがわかりました。Andrey Khatimlanskyがここで アドバイスしてくれました。
Отвяжитесь от тиков конкретного инструмента (OnTick) - это же мультивалютник! Работайте по таймеру или ловите момент образования бара на всех рабочих инструментах, это будет надежнее.
すべての楽器でバー形成の瞬間をとらえようとしたが、思うようにいかなかった。
例えば、こんな感じです。
新しいバーを検出するための関数では、機器とタイムフレームを明示的に指定しています。
OnTick() 関数では、Nikolay Kositsin氏が提案したスキームが採用されています。
例えば、こんな感じです。
isNewBar(Symbol,Timeframe) 関数は、取引が実行される関数、すなわちTradePerformer(parameters) の中で呼び出されます。
例えば、こんな感じです。
つまり、新しいバーは各シンボルに対して個別にチェックされます。新しいバーがなければ、次のシンボルをチェックします。そして、それはダニが発生するたびに起こるのです。しかし、このバリエーションはうまくいきません。
マルチカレンシーエキスパートアドバイザーで新しいバーのチェックを与えられたスキームで正しく実装する方法をご教示ください。
エキスパートと 呼ばれる人の間違いを正すためにユーモアスレッドにすべき?