初学者的问题 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:
而你的打印机的地位如何?我可以拥有代码吗,用于复制?

事实证明,初始化并不发生在终端加载时,但它确实发生在改变时间框架时。

我需要检查一下,在初始化过程中,十几个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-:

事实证明,初始化并不发生在终端加载时,但它确实发生在改变时间框架时。

我需要检查一下,在初始化过程中,十几个EA读取一个文件是否不会有问题?

我正在使用一个类。

一部分类,负责读取文件

所以在打印之前,你的代码中有很多检查和条件。在调试模式 下进行检查,看看哪些地方不工作。
 
Karputov Vladimir:
所以在打印之前,你的代码中有很多检查和条件。转到调试模式,检查哪些地方不工作。
在测试器中一切正常 - 但在终端加载时没有打印 - 这就是让我困惑的地方。
 
-Aleks-:
在测试器中,一切正常 - 但在终端加载时没有打印机 - 这就是让我困惑的地方。
因此,值得增加更多的打印机,看看算法的发展情况。