[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 61

 

亲爱的专家,请回答这个问题。

MetaEditor有方案创建模板的文本文件。它们在创建程序时被向导使用。在模板文本中,指定了创建的程序文件类型的参数。它们之间的参数有标签,在代码文本中没有显示。但终端机以某种方式识别了它们。如果创建了专家顾问,启动功能将在下一个tick之后启动。 如果创建了一个指标,启动功能将在没有tick的情况下启动。标签和其中的所有东西都去哪儿了?

 

我又做了两个测试,看看这一切从何而来。


1.我从ini中读取的不是字符串数组,而是单独的变量。结果如预期,即复制的不是一个值,而是一个引用。

int    numCross=0;

string Cross_1="-", Cross_2="-", Cross_3="-";
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
{
  string sectionName = "common";
  
  numCross = ReadIniInteger( config_path, sectionName, "numCross", 0);
  ArrayResize( CrossName, numCross);
  for (int i=0; i<numCross; i++) CrossName[i] = "-";
  
  sectionName = "cross1";
  Cross_1 = ReadIniString( config_path, sectionName, "name", "-");
  Print("init.1: Cross_1=", Cross_1);
  sectionName = "cross2";
  Cross_2 = ReadIniString( config_path, sectionName, "name", "-");
  Print("init.1: Cross_2=", Cross_2);
  sectionName = "cross3";
  Cross_3 = ReadIniString( config_path, sectionName, "name", "-");
  Print("init.1: Cross_3=", Cross_3);
  Print("init.1: read complete");

  Print("init.2: Cross_1=", Cross_1);
  Print("init.2: Cross_2=", Cross_2);
  Print("init.2: Cross_3=", Cross_3);
  Print("-------------------------------");
  
  sectionName = "cross1";
  Cross_1 = StringSubstr( ReadIniString( config_path, sectionName, "name", "-"), 0, 0);
  Print("init.3: Cross_1=", Cross_1);
  sectionName = "cross2";
  Cross_2 = StringSubstr( ReadIniString( config_path, sectionName, "name", "-"), 0, 0);
  Print("init.3: Cross_2=", Cross_2);
  sectionName = "cross3";
  Cross_3 = StringSubstr( ReadIniString( config_path, sectionName, "name", "-"), 0, 0);
  Print("init.3: Cross_3=", Cross_3);
  Print("init.3: read complete");

  Print("init.4: Cross_1=", Cross_1);
  Print("init.4: Cross_2=", Cross_2);
  Print("init.4: Cross_3=", Cross_3);

  return(0);
}


得到的结果。

2009.04.10 14:31:42 example AUDUSD,H4: init.4: Cross_3=USDJPY
2009.04.10 14:31:42 example AUDUSD,H4: init.4: Cross_2=GBPUSD
2009.04.10 14:31:42 example AUDUSD,H4: init.4: Cross_1=EURUSD
2009.04.10 14:31:42 example AUDUSD,H4: init.3: read complete
2009.04.10 14:31:42 example AUDUSD,H4: init.3: Cross_3=USDJPY
2009.04.10 14:31:42 example AUDUSD,H4: init.3: Cross_2=GBPUSD
2009.04.10 14:31:42 example AUDUSD,H4: init.3: Cross_1=EURUSD
2009.04.10 14:31:42 example AUDUSD,H4: -------------------------------
2009.04.10 14:31:42 example AUDUSD,H4: init.2: Cross_3=USDJPY
2009.04.10 14:31:42 example AUDUSD,H4: init.2: Cross_2=USDJPY
2009.04.10 14:31:42 example AUDUSD,H4: init.2: Cross_1=USDJPY

2009.04.10 14:31:42 example AUDUSD,H4: init.1: read complete
2009.04.10 14:31:42 example AUDUSD,H4: init.1: Cross_3=USDJPY
2009.04.10 14:31:42 example AUDUSD,H4: init.1: Cross_2=GBPUSD
2009.04.10 14:31:42 example AUDUSD,H4: init.1: Cross_1=EURUSD


2.返回字符串数组,但不是从ini中读取字符串值的函数

string ReadIniString(string FileName, string SectionName, string KeyName, 
                     string Default = "")
  {
   string ReturnedString = "";
   int nValue = GetPrivateProfileStringA( SectionName, KeyName, Default, 
                                          ReturnedString, 255, FileName);
   if( nValue > 0)
       return( ReturnedString);
   else 
       return( Default);
  }

用了一个测试函数,它没有调用win api的任何东西

string CrossName[];
int    numCross=0;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
{
  string sectionName = "common";
  
  numCross = ReadIniInteger( config_path, sectionName, "numCross", 0);
  ArrayResize( CrossName, numCross);
  for (int i=0; i<numCross; i++) CrossName[i] = "-";
  
  for (int i=0; i< numCross; i++)
  {
    sectionName = StringConcatenate("cross", i+1);
    CrossName[ i] = someFunc( i+1);
    Print("init.1: CrossName[", ( i+1), "]=", CrossName[ i]);
  }
  Print("init.1: read complete");
  
  for ( i=0; i< numCross; i++)
  {
    Print("init.2: CrossName[", ( i+1), "]=", CrossName[ i]);
  }
  

  Print("-------------------------------");
  for ( i=0; i< numCross; i++)
  {
    sectionName = StringConcatenate("cross", i+1);
    CrossName[ i] = StringSubstr( someFunc( i+1), 0, 0);
    Print("init.3: CrossName[", ( i+1), "]=", CrossName[ i]);
  }
  Print("init.3: read complete");
  
  for ( i=0; i< numCross; i++)
  {
    Print("init.4: CrossName[", ( i+1), "]=", CrossName[ i]);
  }

  return(0);
}
//+------------------------------------------------------------------+
string someFunc(int val)
{
  string ReturnedString = "CROSS_"+ val;
  return( ReturnedString);
}
//+------------------------------------------------------------------+

结果

2009.04.10 14:41:12 例子 AUDUSD,H4: init.4: CrossName[3]=CROSS_3
2009.04.10 14:41:12 例子 AUDUSD,H4: init.4: CrossName[2]=CROSS_2
2009.04.10 14:41:12 例子 AUDUSD,H4: init.4: CrossName[1]=CROSS_1
: 阅读完毕
2009.04.10 14:41:12 示例 AUDUSD,H4: init.3: CrossName[3]=CROSS_3
2009.04.10 14:41:12 示例 AUDUSD,H4: init.3: CrossName[2]=CROSS_2
2009.04.10 14:41:12 示例 AUDUSD,H4: init.3: CrossName[1]=CROSS_1
2009.04.10 14:41:12 示例AUDUSD,H4: -------------------------------

2009.04.10 14:41:12 示例AUDUSD,H4: init.2: CrossName[3]=CROSS_3
2009.04.10 14:41:12 示例AUDUSD,H4: init.2: CrossName[2]=CROSS_2
2009.04.10 14:41:12 示例AUDUSD,H4: init.2: CrossName[1]=CROSS_1
2009.04.10 14:41:12 示例 AUDUSD,H4: init.1: 读取完毕
2009.04.10 14:41:12 示例 AUDUSD,H4: init.1: CrossName[3]=CROSS_3
2009.04.10 14:41:12 示例 AUDUSD,H4: initi.1: CrossName[2]=CROSS_2
2009.04.10 14:41:12 示例 AUDUSD,H4: init.1: CrossName[1]=CROSS_1

已经表明,问题似乎是在转换的

LPTSTR lpReturnedString [out] 一个指向缓冲区的指针,接收 GetPrivateProfileString fi  tomql4 string 的检索字符串win api 
 
xruss >> :

从逻辑上讲,我认为应该在信号形成之前定义一个ORD类型,否则如何在交易标准中加以考虑,还有一个问题--即使历史记录为空,也不能开仓()

在私下里回答你--我认为这样做会更有成效。

 
Reshetov >> :

这要容易得多,不要重新发明轮子,采取一个现成的专家顾问,在马丁格尔上交易,看看它是如何已经实现的。


例如,Universum 3.0


谢谢你,我完全同意--所有的东西都是很久以前发明的。

 

在测试器中测试EA 时执行init()函数。


我想把EA的init()函数中的一些外部变量规范化。

并使用这些规范化的值从start()调用指标。

我不想在start()中包含这种规范化。

在策略测试器中优化EA的过程中,每次改变外部变量都会执行init()函数吗?
 
begemot61 писал(а)>>

在测试器中测试EA时执行init()函数。


我想把EA的init()函数中的一些外部变量规范化。

并使用这些归一化的(新)值从start()调用指标。

我不想在start()中包含这种规范化。

在策略测试器中优化EA的过程中,每次改变外部变量都会执行init()函数吗?

是的,这将是

 

int start()
{
if (OrdersTotal() == 0
&& TimeDayOfWeek(TimeCurrent()) == 5
&& TimeHour(TimeCurrent()) == 12
&& TimeMinute(TimeCurrent()) == 30
&& TimeSeconds(TimeCurrent()) >= 00)
{
Alert("Тра ляля");
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"sell",999999,0,Red);
}


谁能告诉我为什么这里的订单打不开?我做错了什么?
 
Dimoncheg писал(а)>>
有谁知道为什么这里的订单打不开?我做错了什么?

好吧,这个人...必须等到星期五,如果在那一分钟内有一个勾股,就应该打开。

 
Roger >> :

好吧,这个人...必须等到星期五,如果在那一分钟内有一个勾股,它应该会打开。

>>这就是问题所在,我在周五或一周中的任何一天做,警报有效,而订单根本就没有打开。

原因: