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

 
Vitaly Muzichenko:

まあ、節約とは別の目的があるんですけどね。

チャート上にEAがあり、パネルから取引するためにウィンドウズのコピーを追加で開くのは、正しいことではありません。だから、トレーディングパネルをインジケーターの形で書きました。1つのチャートにたくさんのインジケーターを置くことができるのです。

これは小さな抜粋で、コードは少し切り取られていますが、ロジックは明確です。

インジケーター

// Открыть позиции
   // Открыть позицию Buy
   if(sparam==prefix+"_openBuy") {
     BroadcastEvent(gMagic,edLots,_symbol);
     ObjectSetInteger(0,prefix+"_openBuy",OBJPROP_STATE,false);
     ChartRedraw();
   }
   // Открыть позицию Sell
   if(sparam==prefix+"_openSell") {
     BroadcastEvent(gMagic,edLots,_symbol);
     ObjectSetInteger(0,prefix+"_openSell",OBJPROP_STATE,false);
     ChartRedraw();
   }

//===============================================================================================
//------------------ Функция посылает сообщение всем открытым графикам -------------------------+
//===============================================================================================
void BroadcastEvent(long lparam,double dparam,string sparam) {
 ushort eventID=9784-CHARTEVENT_CUSTOM;
 long currChart=ChartFirst(); 
 int i=0; 
  while(i<CHARTS_MAX)                // у нас наверняка не больше CHARTS_MAX открытых графиков 
   { 
    EventChartCustom(currChart,eventID,lparam,dparam,sparam); 
    currChart=ChartNext(currChart); // на основании предыдущего получим новый график 
    if(currChart==-1) break;        // достигли конца списка графиков 
    i++;                            // не забудем увеличить счетчик 
   } 
 }

エキスパートアドバイザー

// -- Получим нажатие кнопки с индикатора
// Открыть позицию
 if(id==9784)     
  {
   if(UseSound) PlaySound("tick.wav");
   OpenPosition(sparam,OP_BUY,dparam,0,0,"comm",(int)lparam,clrNONE);
  }
 
Aleksei Stepanenko:

インジケーターはどこですか?フォーラムのスレッドをさまよわずに済むよう、ここに添付してください。

インジケーター
ファイル:
 
そうですね、EAにチャートのChartIDを ターミナルのグローバル変数 に書き込ませて、すべてのインジケータがどこにイベントを送ればいいかわかるようにすることも考えてました。BroadcastEventのないスポット。
 
Aleksei Stepanenko:
そうですね、ターミナルのグローバル変数に チャートのChartIDを 書き込んで、すべてのインジケータがイベントの送信先を知ることができるようにしようと思っています。BroadcastEventのないスポット。

Glob.variableは同じファイルで、ターミナルが頑張ってディスクを殺してしまうので、静的にチェックしても意味がなく、同じサイクルで、プロファイルでチェックすることになります :)

 
frank2020:
インジケーター
そして、この指標から何を得たいのか?
 
frank2020:
インジケーター

どちらかというと、ここからの 引用

Ищу канальные индикаторы для MT5
Ищу канальные индикаторы для MT5
  • 2017.03.28
  • www.mql5.com
Все привет, ищу любые канальные индикаторы, которых нет по умолчанию в MT5 Нужны для оптимизации ТС (какой их индикаторов покажет устойчивые резуль...
 
Vitaly Muzichenko:

Glob.variableは同じファイルで、ターミナルが頑張ってディスクを殺してしまうので、静的に確認しても意味がなく、同じサイクルですがプロファイルで確認します :)

いいえ、違います。Expert Advisor の起動時に一度、グローバル変数に チャートの番号を書き込みます。そして、起動時に一度だけこの変数を読み込んで、オブジェクトが作成さ れるたびに、EAがあるチャートにだけイベントを送信します。
 
Vitaly Muzichenko:

Glob.variableは同じファイルで、ターミナルが一生懸命作業してディスクを殺すので、静的な方法でチェックするのは合理的ではなく、同じサイクルですが、プロファイルで :)

強制的にフラッシュさせれば同じファイルになりますが、そうでない場合はほとんどラムが動作しています

 

一般的にEA/指標間の正常な伝達は次のようになる。

レシーバーです。

int OnInit()
   {
   GlobalVariableSet("A",ChartID());
   return(INIT_SUCCEEDED);
   }

void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) 
   {
   if(id==CHARTEVENT_CUSTOM+777)
      {
      printf("Сообщение принято: "+sparam);
      }
   }

トランスミッターを使用しています。

int OnInit()
   {
   long a=(long)GlobalVariableGet("A");
   EventChartCustom(a,777,0,0,"Превед медвед!");
   return(INIT_SUCCEEDED);
   }

プロセッサーに負荷をかけない。

 
Aleksei Stepanenko:

一般的には、EA/指標間の通常の送信機が機能すると思われます。

8バイトずつだと、何かと転送に疲れます。

しかし、それは動作します -@fxsaberは biblooを作った、それはTypeToByteがより複雑な構造を交換するために使用されるようです。


ZS: 衝突はどのように処理するのですか?- データ交換の際、すべての道はデータベースにつながり、作業の90%はあなたのために、そして非常に質的に行われます。