Вопросы от "чайника" - страница 40

 

Обьясните,почему не тестируется ни один советник в MetaTrader 5 в тестере стратегий . Нажимаю старт и ничего не происходит.Обьясните пожалуйста.

 
PATRIOT:

Обьясните,почему не тестируется ни один советник в MetaTrader 5 в тестере стратегий . Нажимаю старт и ничего не происходит.Обьясните пожалуйста.

Посмотрите в журнале (для начала).
 

Не получается получить данные из предопределённых структур в созданных функциях. Например:

void OnTick()
{
//--- Объявляем структуру
 MqlRates rates[];
 ArraySetAsSeries(rates,true);

//--- Скопировать необходимое количество значений в массив
 if(CopyRates(NULL,0,0,4,rates) < 0) { Print(ErrorDescription(GetLastError())); return; }
...
}

Затем при попытке получить значения в созданной функции:

void Trailing_Stop_Loss(ENUM_POSITION_TYPE Type, double Trailing_Stop)
{
 string Val_Time = TimeToString(rates[1].time,TIME_DATE|TIME_MINUTES);

...
}

Получаем сообщение об ошибке:

 

 

Как объявить структуры, чтобы они были доступны во всех частях программы?

Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции - Документация по MQL5
 
tol64:

Не получается получить данные из предопределённых структур в созданных функциях. Например:

Затем при попытке получить значения в созданной функции:

Получаем сообщение об ошибке:

 

 

Как объявить структуры, чтобы они были доступны во всех частях программы?

 

В глобальной области. Вне функции.
 
С помощью каких функций можно проверить свободен ли торговый поток для выполнения торговых операций? В MQL4 для этого предназначались функции IsTradeAllowed() и IsTradeContextBusy().

В торговом классе CAccountInfo стандартной библиотеки есть функция TradeAllowed(). В справке написано, что она означает:  "Торговля для данного счета разрешена/запрещена". В кодах возврата торгового сервера я не нашёл кода ошибки, который означает, что торговый поток может быть занят. Это проверка теперь есть в самом торговом терминале? Прошу пояснить.


 

 
tol64:
С помощью каких функций можно проверить свободен ли торговый поток для выполнения торговых операций? В MQL4 для этого предназначались функции IsTradeAllowed() и IsTradeContextBusy().

В торговом классе CAccountInfo стандартной библиотеки есть функция TradeAllowed(). В справке написано, что она означает:  "Торговля для данного счета разрешена/запрещена". В кодах возврата торгового сервера я не нашёл кода ошибки, который означает, что торговый поток может быть занят. Это проверка теперь есть в самом торговом терминале? Прошу пояснить.

В МТ5  торговый поток никогда не занят, ибо торговые операции асинхронны. Возрадуйтесь.
 
tol64:
С помощью каких функций можно проверить свободен ли торговый поток для выполнения торговых операций? В MQL4 для этого предназначались функции IsTradeAllowed() и IsTradeContextBusy().

В торговом классе CAccountInfo стандартной библиотеки есть функция TradeAllowed(). В справке написано, что она означает:  "Торговля для данного счета разрешена/запрещена". В кодах возврата торгового сервера я не нашёл кода ошибки, который означает, что торговый поток может быть занят. Это проверка теперь есть в самом торговом терминале? Прошу пояснить.


В MetaTrader5 нет вообще такого понятия как занятость торгового потока, если МТ4 мог одновременно обрабатывать только один торговый приказ трейдера, то в МТ5 параллельно обрабатывается множество приказов. Коды возврата от сервера по какому либо приказу можно получить в функции OnTrade().
 
uncleVic:

Нужно просто установить цену.

Если цена не устанавливается (по умолчанию 0.0) или устанавливается тек. рыночная, то CExpertTrade побуждаемый из CExpert открывает позицию по рынку.

Если цена устанавливается лучше рынка (ниже текущей для покупки и выше текущей для продажи), CExpertTrade выставит лимит-ордер (при соблюдении отступа).

Если цена устанавливается хуже рынка (выше текущей для покупки и ниже текущей для продажи), CExpertTrade выставит стоп-ордер (при соблюдении отступа).

bool Chhhh::OpenLongParams(double& price, double& sl, double& tp, datetime& expiration)
{
   printf("11111111");
   if(2+2==4)
   {
      price=1.5;
      sl=0;
      tp=0;
      expiration=0;
      return(true);
   }
   else
   {
      return(false);
   }
}

int Chhhh::LongCondition()
{
  printf("222222222");
  return(60);
}
OpenLongParams  вообще не выполняется, не пишет даже "11111111",
а LongCondition напишет "2222222" и откроет ордер,
я что-то не так делаю или она по другому задается ?
 
sergeev:

конкретный тип ведь задается при установке ордера. OrderSend
причем здесь OrderSend ?
 
Lodar:
OpenLongParams  вообще не выполняется, не пишет даже "11111111",
а LongCondition напишет "2222222" и откроет ордер,
я что-то не так делаю или она по другому задается ?

В принципе, всё намного проще. В 99 процентах случаев уровень входа можно регулировать при помощи инпут-параметра:

input double Inp_Signal_PriceLevel    =0.0;

Значение задаётся в "больших" пунктах (т.е. 2/4-хзнаковых).

Значение = 0 - вход по рынку.

Значение > 0 - вход по лимит-ордеру.

Значение < 0 - вход по стоп-ордеру.

Параметр имеет отношение к основному сигналу (в который собираются для голосования выбранные в Мастере сигналы). Алгоритм установки ценовых уровней уже реализован в базовом классе CExpertSignal (экземпляром которого и является основной сигнал).

А вот если Вы хотите использовать алгоритм отличный от реализованного... Но это потом, когда будет интересно.

Причина обращения: