マルチカレンシーアドバイザーに関する質問 - ページ 4

 

OK、VassaV、了解です!

ここで、もうひとつ質問です。通常のコードでは、ポジションを開く と表示されます。

//---------проверяем условие на покупку----------------------------
  if   ( бла-бла-бла  )
   {
  Lots=GetSizeLot(); 
  ticket=OrderSend("GBPUSD",0,Lots,Ask,Slippage,Bid-SL_long*Point,Ask+TP_long*Point,
                                                         "мульти",MagicNum,0,CLR_NONE);
  if    (ticket<0) { Print("Ошибка открытия ордера BUY #", GetLastError()); return (0); }  
 ... ... ...

ここでは、"ticket "の値を持っています。私のEAでは、このようにやや異なるスキームになっています。

if (GBP) {     //если  "выключатель" включен
if (!ExpertOrder(MagicGBP)) { //если ордеров по паре GBPUSD нет
 
//-------Проверяем условие на покупку-------------
if  (    бла-бла-бла     )
    {  
  //---- Цикл открытия ордера  -------------------------------------------                      
int Cnt=1;
  while (Cnt <= 5) 
  { //-----покупаем--------------
    Lots=GetSizeLot();
   if (OrderSend("GBPUSD",OP_BUY,Lots,ask_GBP,3,bid_GBP - sl_GBPUSD_long*point_GBP,
           ask_GBP+tp_GBPUSD_long*point_GBP,"M_1", MagicGBP, 0, Blue) > 0)  break;    
    else 
{ Print ("Ошибка открытия Buy #", ErrorDescription( GetLastError() ),
                                                  " попытка ", Cnt);
                               
        if (Cnt==5) return(0);  //если за 5 попыток не закрыли - выходим
        Cnt++;
        Sleep(15000); // ждём 15 секунд
      }   
    }
  }

でも、「チケット」の価値も必要なんです!このペアの場合午前中は無理です!どうすればいいか教えてください。

 

アドバイスが欲しかったけど、時間がなくて返事を出せなかった皆さん、ありがとうございました。

自分でも(今日の午後)解決したと思っています。こんな感じです。

 //---- Цикл открытия ордера  -------------------------------------------                      
int Cnt=1;
  while (Cnt <= 5) 
  { //-----покупаем--------------
    Lots=GetSizeLot();
   ticketGBP = OrderSend("GBPUSD",OP_BUY,Lots,ask_GBP,3,bid_GBP - sl_GBPUSD_long*point_GBP,
           ask_GBP+tp_GBPUSD_long*point_GBP,"M_1", MagicGBP, 0, Blue);
         if (ticketGBP > 0)  break;    
    else 
{ Print ("Ошибка открытия Buy #", ErrorDescription( GetLastError() ),
                                                  " попытка ", Cnt);
                               
        if (Cnt==5) return(0);  //если за 5 попыток не закрыли - выходим
        Cnt++;
        Sleep(15000); // ждём 15 секунд
      }
 

チャンピオンシップで5分間Expert Advisorを試すという条件、しかも期末の3週間前ということで、皆さんにとってはほぼBEGINNINGとなったようです

私のExpert Advisorは、1つのペアで12ヶ月間の履歴を個別にテストしています - 3-4分以内。すべてのダニに効く。

しかし、複数のEAを1つの多通貨EAに統合した場合、テスト時間は7~10分まで増加します。

そして、実行している1つのペア以外を無効にしています。

プロの方々(に限らず)には、その経験やテスト時間を短縮する方法を教えていただきたいと思っています。

Expert Advisorの構成は 以下の通りです。

 
//---- input parameters---------
 
ЗАДАЕМ ВНЕШНИЕ ПАРАМЕТРЫ ПО КАЖДОЙ ПАРЕ
 
int init()
  {
   return(0);
  }
int deinit()
  {
   return(0);
  }
 
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  { 
 
//*********************************************************************
 
double ЗАДАЕМ ПЕРЕМЕННЫЕ ПО ПЕРВОЙ ПАРЕ 
double ЗАДАЕМ ПЕРЕМЕННЫЕ ПО ВТОРОЙ ПАРЕ
... ... ... ...
double ЗАДАЕМ ПЕРЕМЕННЫЕ ПО ПОСЛЕДНЕЙ ПАРЕ
 
 =========================================================
 
int Orders=OrdersTotal ();     //получаем кол-во открытых ордеров
if (Orders<3)                 //если  открытых ордеров <3
  { 
if (выключатель 1 вкл) {ОТКРЫВАЕМ ПЕРВУЮ ПАРУ } 
if (выключатель 2 вкл) {ОТКРЫВАЕМ ВТОРУЮ ПАРУ } 
... ... ... 
if (выключатель N вкл) {ОТКРЫВАЕМ ПОСЛЕДНЮЮ ПАРУ }  
  }
//========================================================================
for (int x=0; x<OrdersTotal(); x++)                                             {
    if (OrderSelect(x, SELECT_BY_POS, MODE_TRADES)) 
{       
if (UseTrailing 1) - ТРЕЙЛИНГ ПЕРВОЙ ПАРЫ
... ... ...
if (UseTrailing N) - Трейлинг последней пары
}
//======================================================================
   return(0);
  }
 
rid:

期間終了までのわずか3週間、チャンピオンシップで5分間Expert Advisorを試すという条件は、ほぼ全員にとってBEGINNINGとなったのです

私のExpert Advisorは、1つのペアで12ヶ月間の履歴を個別にテストされます - 3-4分以内。すべてのダニに効く。

しかし、複数のEAを1つの多通貨EAに統合した場合、テスト時間は7~10分に増加します。

そして、テスト中の1つのペアを除いて、すべてのペアを無効にしています。

スペシャリスト(に限らず)には、テスト時間を短縮するためのアプローチや方法を教えてもらいたいと思います。

Expert Advisorの構造は このようになっています。

 
//---- input parameters---------
 
ЗАДАЕМ ВНЕШНИЕ ПАРАМЕТРЫ ПО КАЖДОЙ ПАРЕ
 
int init()
  {
   return(0);
  }
int deinit()
  {
   return(0);
  }
 
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  { 
 
//*********************************************************************
 
double ЗАДАЕМ ПЕРЕМЕННЫЕ ПО ПЕРВОЙ ПАРЕ 
double ЗАДАЕМ ПЕРЕМЕННЫЕ ПО ВТОРОЙ ПАРЕ
... ... ... ...
double ЗАДАЕМ ПЕРЕМЕННЫЕ ПО ПОСЛЕДНЕЙ ПАРЕ
 
 =========================================================
 
int Orders=OrdersTotal ();     //получаем кол-во открытых ордеров
if (Orders<3)                 //если  открытых ордеров <3
  { 
if (выключатель 1 вкл) {ОТКРЫВАЕМ ПЕРВУЮ ПАРУ } 
if (выключатель 2 вкл) {ОТКРЫВАЕМ ВТОРУЮ ПАРУ } 
... ... ... 
if (выключатель N вкл) {ОТКРЫВАЕМ ПОСЛЕДНЮЮ ПАРУ }  
  }
//========================================================================
for (int x=0; x<OrdersTotal(); x++)                                             {
    if (OrderSelect(x, SELECT_BY_POS, MODE_TRADES)) 
{       
if (UseTrailing 1) - ТРЕЙЛИНГ ПЕРВОЙ ПАРЫ
... ... ...
if (UseTrailing N) - Трейлинг последней пары
}
//======================================================================
   return(0);
  }

により、ゆっくりとテストされています。

この構造では見えないが、持っている可能性が高い。そうでなければ、テストに最大1分かかる。

インジケータを変更するか、EA内のコードに移動する必要があります。

 

ロッキー

ちゃんと理解できたかな?

私のインジケータは、変数を設定するところです。そして、どうやら彼らは

double ЗАДАЕМ ПЕРЕМЕННЫЕ (индикаторов) ПО ПЕРВОЙ ПАРЕ

の中に移動させるべきでしょう。

if (выключатель 1 вкл) {ОТКРЫВАЕМ ПЕРВУЮ ПАРУ }

を各ペアで適宜使用するのですか?

 
Prototype-IXを 例にとって見てみましょう。これは、マルチカレンシーエキスパートアドバイザーの例です。

12種類の通貨ペアと複数のタイムフレームでテストすることができます。
15:18:05 ProtoType-IXの入力:EMN=10000; Slippage=3; RiskDelta=5; PeriodWPR=8; CriteriaWPR=25; ATRPeriod=40; kATR=0.5; ZeroBar=8; MinTargetinSpread=5; TP_SL_Criteria=2; MaxOpenedOrders=3; MaxOrderSize=5; <br / translate="no"> 15:18:05 2006.10.17 09:38 ProtoType-IX EURUSD,M15: indexPeriod=2 PeriodTesting=15 Symbol index=3 SymbolTesting=EURUSD...
15:18:05 2006.10.17 09:38 NRTR_GATOR EURUSD,M15: ロード成功。
15:18:09 2006.10.17 09:38 NRTR_GATOR EURUSD,M30: ロード成功。
15:18:09 2006.10.17 09:38 NRTR_GATOR EURUSD,H1: ロードに成功しました。
15:18:09 2006.10.17 09:38 NRTR_GATOR EURUSD,H4: ロード成功。
15:18:09 2006.10.17 09:38 NRTR_GATOR EURUSD,Daily: ロード成功。
15:18:09 2007.01.02 00:00 NRTR_GATOR EURUSD,M30: 注意、トレンドが定義されていない。4の末尾からバー
15:18:09 2007.01.02 00 00:00 NRTR_GATOR EURUSD,M30: 警告!トレンドが定義されていないため、設定することができません。
15:18:09 2007.01.02 00:00 NRTR_GATOR EURUSD,H1: 警告!トレンドが定義されていません、ありえません。1の終わりからバー
15:18:09 2007.01.02 00:00 NRTR_GATOR EURUSD,H1: 警告!トレンドが定義されていないため、このようなことはできません。


15:18:23 2007.08.17 22:17 テスター:ストップロス #242 at 1.3483 (1.3483 / 1.3485)
15:18:23 2007.08.17 22:59 NRTR_GATOR EURUSD,日足: 削除
15:18:23 2007.08.17 22:59 NRTR_GATOR EURUSD,H4: 削除しました。
15:18:23 2007.08.17 22:59 NRTR_GATOR EURUSD,H1: 削除しました。
15:18:23 2007.08.17 22:59 NRTR_GATOR EURUSD,M30:削除しました。
15:18:23 2007.08.17 22:59 ProtoType-IX EURUSD,M15: テストが完了しました。


Every ticks」モデルでは、15分間に18秒のテストが必要でした。
 

回答してくださった方、ありがとうございました。だんだん晴れてきましたね。 七面鳥を中に入れました。そして今、その限界に達した。

ロッシュ、-あなたの言う専門家にもう何十回もアプローチしてみたんだ。でも...手を引くたびに...私のささやかな知識では、まだコードとその構造を把握することはできません。どこから手をつけて、どのように研究を構成していけばいいのか、よくわからない。 不明な点が多く、一度にすべてを把握することはできない。私はすべてを理解し始め、やがて考えるのをやめました - 私はどこから始め、何のために・・・。

そしてこの場を借りて、「Expert Advisorの作成例」の記事について質問させてください^ ^。

 
klerk:
多通貨 Expert Advisor の原理は、おおよそ次のとおりです。
1. 特定の通貨と時間間隔を指定する指標の計算で、例えば:iRSI("GBPUSD",60,GBPUSD_period,3,3,MODE_SMA,0,MODE_MAIN,i); //しかし、ここでエラーが発生しました。
2. MarketInfoを使って、価格やポイントなどを取得する。
3. Low[0]の代わりにiLow(...)を使用する例
で、すべての通貨ペアに適用されます。
頑張ってください。
唯一の不便な点は、取引されるすべてのシンボルが、そのタイムフレームでチャートを開いている必要があることです。

チャートが開かれていない、または使用と異なるタイムフレームで開かれている場合、常に実行する必要があります。

すべてのくしゃみでチェック - もiRSIは動作しない場合があります...端末のスワップまで...

敬称略 - S.D.
 

オンラインでは、EAで(インデックスで)すべてのペアでf=1minに設定しました(パフォーマンスを確認するため)。

そして、最初のペアのチャートにtimef=1minで貼り付けました。しかし、EAの他のペアでは、タイムフレームが異なることがよくあります。それにもかかわらず、EAは、コードに実装されているように、時間-分単位で正確にすべてのペアで動作します

それとも、私があなたのことを正しく理解していなかったのでしょうか?

 
klerk:
マルチカレンシーエキスパートアドバイザーの原理は次のとおりです。
1. インジケーターの計算で、特定の通貨と時間間隔を指定します。例えば:iRSI("GBPUSD",60,GBPUSD_period,3,3,MODE_SMA,0,MODE_MAIN,i); //しかし、ここでエラーが発生しました。
2. MarketInfoを使って、価格やポイントなどを取得する。
3.Low[0]の代わりにiLow(...)を使う例
そして
全ての通貨ペアに書き込む。
頑張ってください。


施工の代替えが正しく行われるかどうか教えてください。

H=High[iHighest("USDJPY", PERIOD_H4, MODE_HIGH, 50, 1)];

マルチカレンシーExpert Advisorのコードで、他人のインストゥルメントで作業しているときに、そのようなものである。

double H_current, H_previous;
H_current=0; H_previous=0;
 
for (int n=1; n<51; n++)
  {
    H_previous=H_current;
    H_current=iHigh("USDJPY", PERIOD_H4, n);
    H=MathMax(H_previous, H_current);
  }

そうでない場合、何がエラーなのか、どうすれば正しくできるのか、アドバイスをお願いします。

よろしくお願いします。