MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1228

 
Alexey Belyakov:

入れてください。してないんです。パックで開きます。マジックはそれを無視する。



コードを書くときは、そのロジックをロシア語に翻訳してください。最初は比較が行われ、選択された注文が 成行注文でなければ次の反復へ、シンボルがEURUSDでなければ次の反復へ、マジクが自分のマジクと等しくなければ次の反復へ、というサイクルが行われます。サイクルの終了時に、サイクルの終了までに経過した反復回数を数えます。サイクルが終了し、プログラムは条件に従って注文を開始します。いずれかの条件が常に成立していることを考慮して、注文を開始する。そして、これはすべてのティックにおいて起こることです。

 
Valeriy Yastremskiy:

コードを書くときは、そのロジックをロシア語に翻訳してください。選択された注文が 成行注文でなければ次の反復へ、商品がユーロバックスでなければ次の反復へ、マジクが自分のマジクと等しくなければ次の反復へ、というようにまず比較するサイクルがある。サイクルの終了時に、サイクルの終了までに経過した反復回数を数えます。サイクルが終了し、プログラムは条件に従って注文を開始します。いずれかの条件が常に成立していることを考慮して、注文を開始する。そして、これはすべてのティックに起こることです。

なるほど。しかし、この場合、if(OrderMagicNumber() == MagicNumber)continue で、発注された注文がMagic(o)による注文として受け付けられます。 つまり、EUROBAXで手動発注した注文を無視して、もう1つMagicによるエキスパート・アドバイザーで注文を開く必要があるということです。

OrdersTotal() - これは、Magicでの操作に終止符を打つ問題です。
 
Alexey Belyakov:

了解しました。しかし、この場合: if(OrderMagicNumber() == MagicNumber)continue; 出された注文はMagic(s)によって出された注文を受ける。 つまり、ユーロバックスの手動注文は無視され、別の注文が Magic を持つ EA によって開かれるべきなのだ。

OrdersTotal() - これは、マジシャンのあらゆる操作にストップをかけるはびこるものである。

コードは上から下へ実行されます。if(OrderMagicNumber() == MagicNumber)continue; ループ本体の実行を中断して、新しいループの繰り返しを開始 します。ループが終了し、発注が開始されます。このような書き方をしていますね。総受注 数は関係ありません。もし、自分のマジコンと楽器で発注がない場合は、発注Codeが異なるという条件を作りたい場合。

注文番号を循環させる。もし、私たちのマジックで、私たちの楽器で注文が見つかったら、リターン - スタートから終了します。またはあなたの順序があることをフラグと開始ontikまたはフラグにチェックを開始します。

また、EAスクリプト、インジケータを作成するには、テンプレートからEAを作成した方が良い。メインコードのフィールドはより正しいものになります。

datetime some_time=TimeCurrent();
//extern string Symbol3 = ""; //Инструмент (""текущий по умолчанию)
extern int P=1;          //Таймфрейм
extern int MagicNumber = 100500;


int start()
{

int send;
                                     
double SL=200;                                   
double TP=200;                       
double Lots=1;       

for(int i = OrdersTotal(); i >= 0; i--) 
{
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol() == "EURUSD" && OrderMagicNumber() == MagicNumber)return(0);
}
          

             
if ((Close[0]>High[1])&&(n==0))
{
send=OrderSend("EURUSD",OP_BUY,Lots,Ask,3,Bid-SL*Point,Bid+TP*Point,MagicNumber);
}

if ((Close[0]<Low[1])&&(n==0))  
{
send=OrderSend("EURUSD",OP_SELL,Lots,Bid,3,Ask+SL*Point,Ask-TP*Point,MagicNumber);
}

return(0);
}
 
Valeriy Yastremskiy:

コードは、ループのルールに従って、上から下へと実行されます。if(OrderMagicNumber() == MagicNumber)continue; ループ本体の実行を中断し、新しいループの繰り返しを開始 します。ループが終了し、発注が開始されます。このような書き方をしていますね。総受注 数は関係ありません。もし、自分のマジコンと楽器で発注がない場合は、発注Codeが異なるという条件を作りたいのであれば。

注文番号を循環させる。もし、私たちのマジックで、私たちの楽器で注文が見つかったら、リターン - スタートから終了します。またはあなたの順序があることをフラグと開始ontikまたはフラグにチェックを開始します。

また、EAスクリプト、インジケータを作成するには、テンプレートからEAを作成した方が良い。メインコードのフィールドはより正しいものになります。

for(int i = OrdersTotal(); i >= 0; i--) 
{
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol() == "EURUSD" && OrderMagicNumber() == MagicNumber)return(0);
}

これでは解決にならないのでしょうが、どのような方向で取り組めばよいのでしょうか。

数十種類のバリエーションを試しました。どちらかが1つの順序を開くか、または中断することなく、tuyvukuchu。

ここで、ところで、OrderSekect以上 - bool型の変数を設定する必要があり、そうでなければ、それは誓う。

 
Alexey Belyakov:

これでは解決にならないが、どっちつかずになってしまう。

すでに数十種類のバリエーションを試しました。単一の注文を開くか、中断することなく開くか、どちらかです。

ところで、OrderSekectの上では、bool型の変数が設定されるべきであり、そうでなければ、それは誓うでしょう。

そうです、どこにも戻らないはずです。

for(int i = OrdersTotal(); i >= 0; i--) 
{
     bool sel = OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol() == "EURUSD" && OrderMagicNumber() == MagicNumber)return(0);
}

やりたいアルゴリズムを書いた方がいい。

 
Alexey Belyakov:

これでは解決にならないが、どっちつかずになってしまう。

すでに数十種類のバリエーションを試しました。単一の注文を開くか、中断することなく開くか、どちらかです。

ところで、OrderSekectの上では、bool型の変数が設定されるべきであり、そうでなければ、それは誓うでしょう。

return(0) の代わりに continue とする。

 

知識が豊富で良い人たちです!MT5のEAにEnvelopesインジケータを実装するのに役立つ。EA自体は全てのティックを(スキップせずに)処理する必要があります。私はいくつかのバリアントを試してみました、私はドキュメントを見ました、私はバリアントが好きなようですが、それはハンドラOnCalculateのためのものです。標準ライブラリでは まだ試していないのですが・・・。さて、ここで私の初期実装を紹介します。

input int       Indicatorperiod         = 3;
input double    EnvelopesDeviation      = 0.07;
int    handle;                                          //--- переменная для хранения хэндла индикатора iEnvelopes
double upperEnv[3], lowerEnv[3];                        // динамические массивы для хранения численных значений Emvelopes
double local_envelopesupper, local_envelopeslower;      // в эти переменные пытаюсь получить значения верхней и нижней линии индикатора
...

int OnInit()
...
handle=iEnvelopes(_Symbol,_Period,Indicatorperiod,0,MODE_LWMA,PRICE_OPEN,EnvelopesDeviation);
...

void OnTick()
...
//--- Объявляем структуру, которая будут использоваться
   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];
...

ビジュアルテスターで、私は取得します。


何が悪いのか、どうすればいいのか、教えてください。
Документация по MQL5: Стандартная библиотека
Документация по MQL5: Стандартная библиотека
  • www.mql5.com
Некорректное отображение индикатора
 
Valeriy Yastremskiy:

そう、誓うはずのそれは、どこにも帰らない。

やりたいアルゴリズムを書いた方がいい、何が必要なのかはっきりしない。

最初のメッセージの中に、コードがあります。簡単なことで、前回の高値/安値を突破し、取引を開始するのです。このEAで開いた注文は、手動または他のEAで開いた他の注文と交差してはいけません。

インターネットで検索しまくりました。割と些細なことなんですが、バリエーションが多いんです。簡単なことのようで、どこにもない。

 
Alexey Belyakov:

最初のメッセージの中に、コードがあります。単純に、前回の高値/安値をブレイクして、トレードを開始することです。このEAで開いた注文は、手動で開いた他の注文や他のEAで開いた注文と重なってはいけません、つまりEAは独立して動作する必要があります。

インターネットで検索しまくりました。割と些細なことなんですが、バリエーションが多いんです。簡単なことのようで、どこにもない。

Expert Advisorの動作をステップバイステップで完全に説明する。まず、選択したシンボルに私たちのマジックを使った注文があるかどうかを確認します。それがあれば仕事を終わらせ、なければ注文をつける。注文後はどうなるのですか?それは次のようなものです。
 
Maxim Kuznetsov:

return(0) の代わりに continue を指定します。

同じなら、それ以上進まず、終了...。平等でないと嫌だ......なら、続けろ。分かりにくくなっています。