MQL4で原理的に解決可能なタスクですか? - ページ 2

 

コードを教えてください、今夜までに解決します。

直に書いてもいいんですよ :)

 
tara:
コードを教えてください、夕方までには解決します。

#property copyright"Copyright 2013, MetaQuotes Software Corp.
#プロパティリンク "http://www.metaquotes.net"

//#include <WinUser32.mqh>.
//int whwnd;
//#include <stdlib.mqh> // 標準ライブラリ
ダブルビー
倍である。
double maxpercent = 0;
int timetoresume = 10;
int selecttime = 1;
文字列 status,status1;
intの合計です。
int magic[100];
int kol=0;
int tempkol =0;
//+------------------------------------------------------------------+
//| エキスパート初期化関数
//+------------------------------------------------------------------+
int init()
{

return(0)です。
}
//+------------------------------------------------------------------+
//| 専門家による初期化関数
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0)です。
}
//+------------------------------------------------------------------+
//| エキスパートスタート機能
//+------------------------------------------------------------------+
int start()
{
// while(!IsStopped()) // ユーザーまで。
/// { // ...プログラムの実行を停止しない
// RefreshRates();
b = AccountBalance()/100;
パーセント = AccountProfit()/b;
if (maxpercent > percent) maxpercent = percent;
Timetoresume = TimeLocal();
if (percent*(-1) > 1) status = "フリーズ作動";
else status = "実行中";
total=OrdersTotal()。
kol = 0;
for (int i=total; i>0; i--) { //配列の各要素に各開注文の値を割り当てる
OrderSelect (i-1,SELECT_BY_POS,MODE_TRADES);
magic[i] = OrderMagicNumber ();
// Print ("Magic " + i+" " +magic[i];
}
for (int k = 1; k <= 1; k++){ // 最初のオープンオーダーのマジックナンバーとそれ以降のマジックナンバーを比較する。
tempkol = magic[k];
for ( int l = 1; l <=total;l++ ){。
if (tempkol != magic[l]) kol++;
}
}
if(kol >= 2){ // 2つ以上のEAがすでに取引に参入している場合
GlobalVariableSet ("Freeze1",200) ; // 他のEAがこれらのグローバル変数をリッスンする必要があります。
GlobalVariableSet ("Freeze2",200); // そして、他の人が注文を出す時間がある間は、取引に入らないようにする。
status1="test2"; // アドバイザー GlobalVariableSet ("Freeze1",200) が、順番を待って実行する。
} //端末で順番待ちをする
コメント(AccountProfit()
,"\n"
, "DrawDown " , NormalizeDouble (percent,1)*(-1), " % ", " MaxDrawDown " , NormalizeDouble (maxpercent,1)*(-1), " % ".
タイムトレスム
,"\n"
", ステータス," ", パーセント*(-1)
,"\n"
注文合計",合計
,"\n"
, "OrderSymbol()," Magic ",OrderMagicNumber()," ",kol
♪♪♪♪~
);
を返します。
}

//+------------------------------------------------------------------+

判断しないでください、私が最後にシンクレアでプログラムを書いたのは、学生時代のBasicです・・・・。


 
Zakyza:


MQL4で、まず管理するEAのコードを実行し、次に他のEAを全て実行するような優先順位のシステムは可能でしょうか?


もちろん、可能です。

マスター・スレーブ方式でEAを組織化する。

 
avtomat:


もちろん、できますよ。

マスター・スレーブ型のアドバイザーを組織化し、「マスター・スレーブ」的な働き方をさせる


トレーディングエキスパートアドバイザーは、グローバル変数の 変更によってのみ影響を受けることができ、私の「マネージャー」が順番を待ってそこに200を書き込むときに、彼らはこの変数GlobalVariableSet(「Freeze1」,200)を聞く ことができます。
 
Zakyza:

トレーディングエキスパートアドバイザーは、グローバル変数の値を変更することによってのみ影響を受けることができ、私の「マネージャー」が順番を待って いる間に、この変数GlobalVariableSet ("Freeze1",200) を聞いて、そこに200を書き 込むのです。

マネージャーならともかく、なぜ何らかの出番を待っているのでしょうか?

管理者はGVに取引禁止を書きました - 彼らは座って、静かにしています(奴隷は最初のティックでグローバルフラグをチェックしました、もし 'sit no bleep' - JawolGerGeneralと言い、return(0))...です。

なぜマネージャーはGVフラグにアクセスする順番を待っているのですか?

 
全ては1つのExpert Advisorで行われます ))))100組を詰め込むことができます ))))
 
artikul:
全ては1つのExpert Advisorで行われます ))))100組でも入れることができます ))))

まあ、そういうことではないのですが...。
 

主人

//+------------------------------------------------------------------+
int deinit()
  {
      GlobalVariableSet(work,0);   // запрещение работы ведомым
   return(0);
  }
//+------------------------------------------------------------------+
.....

int start()
   .....

   work=GlobalVariableGet(work);

   if( work==0 && всё_хорошо )   GlobalVariableSet(work,1);   // разрешение работы ведомым

   if( work==1 && всё_плохо )    GlobalVariableSet(work,0);   // запрещение работы ведомым

// можно организовать систему запретов/разрешений любой сложности   

   .....

スレーブ

.....

int start()


   work=GlobalVariableGet(work);

   if( work==0 )   { стоп } ;    // здесь возможны некоторые действия для завершения текущих процессов

   if( work==1 )   { работа };   // ведомым разрешена работа -- можно работать в нормальном режиме

.....

ご理解いただけたでしょうか。

 
avtomat:

主人

スレーブ

ご理解いただけたでしょうか。


すべてクリア、ありがとうございます。

この方法(=状況に応じて禁止・許可する)を試してみましたが、私の場合は次のような方法で対応しています。

この後、マスターの初期化:int deinit() ・・・・・・。// スレーブによる作業の禁止は 黙認されているが、ウィザードが緩和されると同時に ( if (同一魔女の数 <=2) )GlobalVariableSet(work,1); に書き込む// スレーブを有効に し、8組のスレーブがあり、マスターの条件で指定した2ではなく4 - 6組で開くように管理している。同一マジックの数が2よりかなり多いことをマスターが「理解」する前にオープンしてしまう。その後、もちろん他のスレーブは無音ですが、希望通り2枚開きではなく、4〜6枚開きになっています。

私の理解では、int start()のコードを実行した後、コントロールはint start ()のスレーブEAに与えられ、スレーブEAの int start( )に依存して、ウィザード開始までに各ペアが何枚開くか、グローバルは法外になるのです。 端末のアルゴリズムや問題の本質を誤解していたらご指摘ください。大雑把に言えばそうです:1つのマスターと1つのスレーブが正しく動作する可能性が最も高い場合、しかしスレーブはその後8-10 !

だから書いたのですが、masterをループスタートさせてずっと起動したままにしようとしたら、ターミナルがハングアップしてしまいました。

artmedia70: 「マネージャーならともかく、なぜ行列のようなものを待って いるのですか?" -それが知りたいのです。

 

そして、なぜ、なぜ、同じマジックが2つも作られているのか?

グローバル変数を使って、含まれるEAに重ならない魔法領域を割り当てることができる。対応するチェックと代入はinit()で行われる。

その上、現在の一般的な状況に応じて、明示的に指定するか、マスターを割り当てることによって、各シンボルに開く注文の数を制限することができ、まさにマスターがコントロールすべきものです。

つまり、スレーブが何かアクションを起こしたら、マスターに報告しなければならないのです。そして、主人はその要約を述べ、それに基づいて奴隷のその後の行動(あるいは不作為)を決定する。