初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 442

 

皆さん、こんばんは。

1.

戦略 - バーが表示され、ストップロスとテイクプロフィット(SL、TP)で保留中の注文を設定 し、他は何もしない。

現在のバーで、しばらくすると注文のトリガーとなる価格が現れ、その後、SL価格が来て、TP価格が来ると仮定します。

新しいバーの開始価格は、SLとTPの価格制限の間のどこかにあると仮定してください。この計算はどのように行われるのですか?

論理的には、テスターは次のバーのオープンプライスしか持っていないので、それはできません。そして、保留注文の発動条件で指定された価格と等しくないので、注文は発動されないはずです。

しかし:テスターの実行中に、なぜかトレードが実行され、ストップが発動される。どんなふうに?

2.

テスターは起動のたびにfxtを作成します。そして、これは時間です。これを回避するためのヒントとなる設定は見つかりませんでしたが...。アイデアとしては、一度作成して、何も変更しなければ、このファイルを使う、しかし、いや、ターミナルが書き換えている

 
EAはinit()を実行するためにティックが必要なのか教えてください。
 
-Aleks-:
EAはinit()を実行するためにティックが必要なのか教えてください。

いいえ、そうではありません。これを確認するためのコードを紹介します。

//+------------------------------------------------------------------+
//|                                                  test_expert.mq5 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright  "Copyright 2015, MetaQuotes Software Corp."
#property link       "http://www.mql5.com"
#property version    "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 
   Print(__FUNCTION__);
   return(INIT_FAILED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   Print(__FUNCTION__);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   Print(__FUNCTION__);
  }
//+------------------------------------------------------------------+
チャートに貼り付けて、週末にどのような機能が働いているかを確認します。
 
-Aleks-:
EAはinit()を実行するためにティックが必要なのか教えてください。
そんなことはないだろう。
 
Karputov Vladimir:

いいえ、そうではありません。以下は、そのコードをご覧ください。

チャートに貼り付けて、週末にどの機能が働いているかを確認します。
たぽちゅん
そんなことはないだろう。
早速のご返信ありがとうございました。では、なぜうまくいかないのかがわからない。プリントもないし...。
 
-Aleks-:
早速のご返信ありがとうございました。では、なぜ動かないのか理解できません。印刷がないのです...。
プリンターはどこにありますか?再現するためのコードを教えてください。
 
Karputov Vladimir:
そして、あなたのプリンターの立ち位置は?再現のために、コードを教えてください。

初期化はターミナルをロードしたときには起こらないが、タイムフレームを変更したときには起こることが判明した。

初期化時に1つのファイルを何十ものEAで読んでも問題ないか確認したいのですが...。

クラスを使っています。

int init()
  {
//Автоматическая настройка
   if(Use_SetupLoad==true)
     {
      CSVReader FileLoads(FileLoadSetup);
      FileLoads.SetDelimiter(';');
      FileLoads.SetCommon(true);
      int StrokaSetup=0;
      if(FileLoads.Load(1))
        {
         PrintFormat("File %s loaded. Total rows=%d, Total columns=%d",FileLoads.FileName(),FileLoads.TotalRows(),FileLoads.TotalColumns());
         
         for (int i=1;i<30; i++)
         //for (int i=1; i<100 || StrokaSetup!=0; i++)
         {
           if (Magic==FileLoads.GetIntValue(i,13))
           {
            StrokaSetup=i ;
            Print ("StrokaSetup=",StrokaSetup);
            break;
            }
         //   if (i==100) i=1;
         //  Print (FileLoads.GetIntValue(i,13));
         }
         /*
         for (int i=1; i<30; i++)
         {
         Print (FileLoads.GetIntValue(i,13));         
         }
         */
         if(StrokaSetup!=0)
           {
            pipsXH=FileLoads.GetIntValue(StrokaSetup,4)/10;
            if (pipsXH>0)
            {
            pMAH=FileLoads.GetIntValue(StrokaSetup,3);
   //         typeMAH=FileLoads.GetIntValue(StrokaSetup,3);
   //         priceMAH=FileLoads.GetIntValue(StrokaSetup,2);
            
  //          if (pipsXH<0)
  //          PrintFormat("pMAH=%d",pMAH,"typeMAH=%d",typeMAH,"priceMAH=%d",priceMAH,"pipsXH=%d",pipsXH);
            }
            else pipsXH=(-1);
            
            pipsXL=FileLoads.GetIntValue(StrokaSetup,7)/10*(-1);
            if (pipsXL>0)
            {
            pMAL=FileLoads.GetIntValue(StrokaSetup,6);
     //       typeMAL=FileLoads.GetIntValue(StrokaSetup,3);
     //       priceMAL=FileLoads.GetIntValue(StrokaSetup,2);
            
      //      PrintFormat("pMAL=%d",pMAL,"typeMAL=%d",typeMAL,"priceMAL=%d",priceMAL,"pipsXL=%d",pipsXL);
            }
            else pipsXL=(-1);
                        
            pMAT=FileLoads.GetIntValue(StrokaSetup,9);
      //      typeMAT=FileLoads.GetIntValue(StrokaSetup,3);
      //      priceMAT=FileLoads.GetIntValue(StrokaSetup,2);
      //      PrintFormat("pMAT=%d",pMAT,"typeMAT=%d",typeMAT,"priceMAT=%d",priceMAT);
            
            lot=FileLoads.GetDoubleValue(StrokaSetup,11);
      //    PrintFormat("pMAH=%d",pMAH,"pipsXH=%d",pipsXH,"pMAL=%d",pMAL,"pipsXL=%d",pipsXL,"lot=%d",lot);            
            Print("Magic=",Magic," pMAH=",pMAH," pipsXH=",pipsXH," pMAL=",pMAL," pipsXL=",pipsXL," lot=",lot);            
            
           }

        }
      else PrintFormat("Error in loading data from %s",FileLoads.FileName());
     }
///Конец автоматической настройки///  
   return(INIT_SUCCEEDED);
  } 

ファイルの読み込みを担当するクラスの一部

//+------------------------------------------------------------------+
//| Load                                                             |
//+------------------------------------------------------------------+
bool CSVReader::Load(int start_line)
  {
   int filehandle=FileOpen(m_filename,FILE_CSV|FILE_READ|FILE_ANSI|FILE_SHARE_READ,'\n');
   if(filehandle==INVALID_HANDLE)
     {
      Alert("Error in open of file ",m_filename,", error",GetLastError());
      return(false);
     }
//---
   int line_index=0;
   while(!FileIsEnding(filehandle))
     {
      string str=FileReadString(filehandle);
      //--- skip 0th row
      if(line_index>=start_line)
         if(str!="")
           {
            if(line_index==1) AddData(str,true);
            else AddData(str,false);
           }
      line_index++;
     }
//---
   FileClose(filehandle);
   return(true);
  } 
 
-Aleks-:

初期化はターミナルをロードしたときには起こらないが、タイムフレームを変更したときには起こることが判明した。

初期化時に1つのファイルを何十ものEAで読んでも問題ないか確認したいのですが・・・。

クラスを使っています。

ファイル読み込みを担当するクラスの一部

つまり、プリントする前のコードには、たくさんのチェックや条件があるのです。デバッグモードで調べて、何がうまくいっていないのかを確認してください。
 
Karputov Vladimir:
つまり、プリントする前のコードには、たくさんのチェックや条件があるのです。デバッグモードに 移行し、動作していない箇所を確認します。
テスターではすべてうまくいくのですが、ターミナルを読み込むと印刷されないので、困惑しています。
 
-Aleks-:
テスターではすべて動作していますが、ターミナルを読み込むとプリンターがないのです。
ですから、プリンターを増やしてアルゴリズムの行く末を見守る価値はあると思います。
理由: