[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 61

 

Уважаемые эксперты, ответьте пожалуйста на вопрос:

В MetaEditor есть текстовые файлы шаблонов создания программ. Их использует мастер при создании программы. В тексте шаблона указываются параметры типа создаваемого файла программы. Там есть теги между ними параметры, которые не отображаются в тексте кода. Но терминал их как-то распознает. Если создан эксперт запуск функции Start после прихода очередного тика, если индикатор, то запуск функции Start без тика. Куда деваются тэги и все что в них?

 

Провел еще 2 теста, чтобы понять откуда все же растут ноги:


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. вернул обратно массив оф стринг, но вместо ф-ии чтения из ини строковых значений

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 example AUDUSD,H4: init.4: CrossName[3]=CROSS_3
2009.04.10 14:41:12 example AUDUSD,H4: init.4: CrossName[2]=CROSS_2
2009.04.10 14:41:12 example AUDUSD,H4: init.4: CrossName[1]=CROSS_1
2009.04.10 14:41:12 example AUDUSD,H4: init.3: read complete
2009.04.10 14:41:12 example AUDUSD,H4: init.3: CrossName[3]=CROSS_3
2009.04.10 14:41:12 example AUDUSD,H4: init.3: CrossName[2]=CROSS_2
2009.04.10 14:41:12 example AUDUSD,H4: init.3: CrossName[1]=CROSS_1
2009.04.10 14:41:12 example AUDUSD,H4: -------------------------------
2009.04.10 14:41:12 example AUDUSD,H4: init.2: CrossName[3]=CROSS_3
2009.04.10 14:41:12 example AUDUSD,H4: init.2: CrossName[2]=CROSS_2
2009.04.10 14:41:12 example AUDUSD,H4: init.2: CrossName[1]=CROSS_1
2009.04.10 14:41:12 example AUDUSD,H4: init.1: read complete
2009.04.10 14:41:12 example AUDUSD,H4: init.1: CrossName[3]=CROSS_3
2009.04.10 14:41:12 example AUDUSD,H4: init.1: CrossName[2]=CROSS_2
2009.04.10 14:41:12 example AUDUSD,H4: init.1: CrossName[1]=CROSS_1

показал, что загвоздка по всей видимости в приведении

LPTSTR lpReturnedString [out] A pointer to the buffer that receives the retrieved string win api ф-ии GetPrivateProfileString к mql4 string.
 
xruss >>:

а как должно быть? логически я думал определить ORDtype до формирования сигнала. в противном случае каким образом он будет учтен в торговых критериях. и еще одна загвоздка - позиции не открываются даже с пустой историей((

Ответил вам в личку - думаю, так будет продуктивнее.

 
Reshetov >>:

Гораздо проще, не изобретать велосипед, а взять для начала один из готовых советников, торгующих по мартингейлу и посмотреть как все это уже реализовано.


Например, Universum 3.0


Благодарю, полностью согласен-все уже давно изобретено

 

Исполнение функции init() при тестировании советника в тестере.


Я хочу нормализовать значение нескольких внешних (extern) переменных внутри функции init() советника

и использовать эти нормализованные (новые) значения для вызова индикатора из start().

Не хотелось бы включать эту нормализацию в start().

Будет ли функция init() выполнятся каждый раз при изменении внешней переменной во время оптимизации советника в тестере стратегий?
 
begemot61 писал(а) >>

Исполнение функции init() при тестировании советника в тестере.


Я хочу нормализовать значение нескольких внешних (extern) переменных внутри функции init() советника

и использовать эти нормализованные (новые) значения для вызова индикатора из start().

Не хотелось бы включать эту нормализацию в start().

Будет ли функция 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 >>:

Так, эта.. Надо ждать до пятницы, если в течение этой минуты будет тик, должно открыться.

В том то вся и фигня что делаю пятницу или любой другой день недели - алерт работает а ордер не открывается нифига