inputint Indicatorperiod = 3;
inputdouble EnvelopesDeviation = 0.07;
int handle; //--- переменная для хранения хэндла индикатора iEnvelopesdouble upperEnv[3], lowerEnv[3]; // динамические массивы для хранения численных значений Emvelopesdouble local_envelopesupper, local_envelopeslower; // в эти переменные пытаюсь получить значения верхней и нижней линии индикатора
...
intOnInit()
...
handle=iEnvelopes(_Symbol,_Period,Indicatorperiod,0,MODE_LWMA,PRICE_OPEN,EnvelopesDeviation);
...
voidOnTick()
...
//--- Объявляем структуру, которая будут использоватьсяMqlRates mrate[3]; // Будет содержать цены, объемы и спред для каждого бараArraySetAsSeries(mrate, true);
//--- Получить исторические данные последних 3-х баровif(CopyRates(_Symbol,_Period,0,3,mrate)!=3)
{
Alert("Ошибка копирования исторических данных - ошибка:",GetLastError(),"!!");
return;
}
//--- Используя хэндлы индикаторов, копируем новые значения индикаторных буферов в массивыif(CopyBuffer(handle,0,0,3,upperEnv)<2 || CopyBuffer(handle,1,0,3,lowerEnv)<2)
{
Alert("Ошибка копирования буферов индикатора Envelopes - номер ошибки:",GetLastError(),"!!");
return;
}
...
local_envelopesupper = upperEnv[1];
local_envelopeslower = lowerEnv[1];
...
入れてください。してないんです。パックで開きます。マジックはそれを無視する。
コードを書くときは、そのロジックをロシア語に翻訳してください。最初は比較が行われ、選択された注文が 成行注文でなければ次の反復へ、シンボルがEURUSDでなければ次の反復へ、マジクが自分のマジクと等しくなければ次の反復へ、というサイクルが行われます。サイクルの終了時に、サイクルの終了までに経過した反復回数を数えます。サイクルが終了し、プログラムは条件に従って注文を開始します。いずれかの条件が常に成立していることを考慮して、注文を開始する。そして、これはすべてのティックにおいて起こることです。
コードを書くときは、そのロジックをロシア語に翻訳してください。選択された注文が 成行注文でなければ次の反復へ、商品がユーロバックスでなければ次の反復へ、マジクが自分のマジクと等しくなければ次の反復へ、というようにまず比較するサイクルがある。サイクルの終了時に、サイクルの終了までに経過した反復回数を数えます。サイクルが終了し、プログラムは条件に従って注文を開始します。いずれかの条件が常に成立していることを考慮して、注文を開始する。そして、これはすべてのティックに起こることです。
なるほど。しかし、この場合、if(OrderMagicNumber() == MagicNumber)continue で、発注された注文がMagic(o)による注文として受け付けられます。 つまり、EUROBAXで手動発注した注文を無視して、もう1つMagicによるエキスパート・アドバイザーで注文を開く必要があるということです。
OrdersTotal() - これは、Magicでの操作に終止符を打つ問題です。了解しました。しかし、この場合: if(OrderMagicNumber() == MagicNumber)continue; 出された注文はMagic(s)によって出された注文を受ける。 つまり、ユーロバックスの手動注文は無視され、別の注文が Magic を持つ EA によって開かれるべきなのだ。
OrdersTotal() - これは、マジシャンのあらゆる操作にストップをかけるはびこるものである。コードは上から下へ実行されます。if(OrderMagicNumber() == MagicNumber)continue; ループ本体の実行を中断して、新しいループの繰り返しを開始 します。ループが終了し、発注が開始されます。このような書き方をしていますね。総受注 数は関係ありません。もし、自分のマジコンと楽器で発注がない場合は、発注Codeが異なるという条件を作りたい場合。
注文番号を循環させる。もし、私たちのマジックで、私たちの楽器で注文が見つかったら、リターン - スタートから終了します。またはあなたの順序があることをフラグと開始ontikまたはフラグにチェックを開始します。
また、EAスクリプト、インジケータを作成するには、テンプレートからEAを作成した方が良い。メインコードのフィールドはより正しいものになります。
コードは、ループのルールに従って、上から下へと実行されます。if(OrderMagicNumber() == MagicNumber)continue; ループ本体の実行を中断し、新しいループの繰り返しを開始 します。ループが終了し、発注が開始されます。このような書き方をしていますね。総受注 数は関係ありません。もし、自分のマジコンと楽器で発注がない場合は、発注Codeが異なるという条件を作りたいのであれば。
注文番号を循環させる。もし、私たちのマジックで、私たちの楽器で注文が見つかったら、リターン - スタートから終了します。またはあなたの順序があることをフラグと開始ontikまたはフラグにチェックを開始します。
また、EAスクリプト、インジケータを作成するには、テンプレートからEAを作成した方が良い。メインコードのフィールドはより正しいものになります。
これでは解決にならないのでしょうが、どのような方向で取り組めばよいのでしょうか。
数十種類のバリエーションを試しました。どちらかが1つの順序を開くか、または中断することなく、tuyvukuchu。
ここで、ところで、OrderSekect以上 - bool型の変数を設定する必要があり、そうでなければ、それは誓う。
これでは解決にならないが、どっちつかずになってしまう。
すでに数十種類のバリエーションを試しました。単一の注文を開くか、中断することなく開くか、どちらかです。
ところで、OrderSekectの上では、bool型の変数が設定されるべきであり、そうでなければ、それは誓うでしょう。
そうです、どこにも戻らないはずです。
やりたいアルゴリズムを書いた方がいい。
これでは解決にならないが、どっちつかずになってしまう。
すでに数十種類のバリエーションを試しました。単一の注文を開くか、中断することなく開くか、どちらかです。
ところで、OrderSekectの上では、bool型の変数が設定されるべきであり、そうでなければ、それは誓うでしょう。
return(0) の代わりに continue とする。
知識が豊富で良い人たちです!MT5のEAにEnvelopesインジケータを実装するのに役立つ。EA自体は全てのティックを(スキップせずに)処理する必要があります。私はいくつかのバリアントを試してみました、私はドキュメントを見ました、私はバリアントが好きなようですが、それはハンドラOnCalculateのためのものです。標準ライブラリでは まだ試していないのですが・・・。さて、ここで私の初期実装を紹介します。
ビジュアルテスターで、私は取得します。
そう、誓うはずのそれは、どこにも帰らない。
やりたいアルゴリズムを書いた方がいい、何が必要なのかはっきりしない。
最初のメッセージの中に、コードがあります。簡単なことで、前回の高値/安値を突破し、取引を開始するのです。このEAで開いた注文は、手動または他のEAで開いた他の注文と交差してはいけません。
インターネットで検索しまくりました。割と些細なことなんですが、バリエーションが多いんです。簡単なことのようで、どこにもない。
最初のメッセージの中に、コードがあります。単純に、前回の高値/安値をブレイクして、トレードを開始することです。このEAで開いた注文は、手動で開いた他の注文や他のEAで開いた注文と重なってはいけません、つまりEAは独立して動作する必要があります。
インターネットで検索しまくりました。割と些細なことなんですが、バリエーションが多いんです。簡単なことのようで、どこにもない。
return(0) の代わりに continue を指定します。