Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 901

 

Цитата из справочника:

//+------------------------------------------------------------------+

//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- получим значение пользовательского индикатора
   double value=iCustom(_Symbol,_Period,"::Indicators\\SampleIndicator.ex4",0,0);

Ссылка на переменные индикатора в функции инициализации, не в функции start?  Ссылка на переменные индикатора в функции инициализации открывает только одну позицию. 

 
Поздно уже. Артем завтра сможете ответить? Заранее спасибо.
 
Oleg Kolesov:

Цитата из справочника:

//+------------------------------------------------------------------+

//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- получим значение пользовательского индикатора
   double value=iCustom(_Symbol,_Period,"::Indicators\\SampleIndicator.ex4",0,0);

Ссылка на переменные индикатора в функции инициализации, не в функции start?  Ссылка на переменные индикатора в функции инициализации открывает только одну позицию. 

Вместо start уже очень давно пора использовать OnTick() и другие обработчики событий. Забудьте о функциях совсем старого MetaTrader 4. Новый MQL4 сейчас очень близок к MQL5 - основные отличия лишь в иной организации торговых функций и в индикаторах - они теперь создаются в обработчике OnInit() - создаётся хэндл индикатора, и далее уже доступ к данным по этому хэндлу. В MQL4 - иначе. Но в ресурсы одинаково размещаются если мне память не изменяет.

Вы главное - прочитайте как правильно разместить индикатор в ресурсы, а уж доступ к его рассчитанным данным не сильно отличается от доступа обычным способом по iCustom() - там лишь имя немного иное.
Документация по MQL5: Обработка событий / OnTick
Документация по MQL5: Обработка событий / OnTick
  • www.mql5.com
//|                                                   TradeByATR.mq5 | //|                        Copyright 2018, MetaQuotes Software Corp. | //|                                             https://www.mql5.com | //| Expert initialization function                                   |...
 
Oleg Kolesov:
Поздно уже. Артем завтра сможете ответить? Заранее спасибо.

Не обещаю - загружен.

ЗЫ "поздно" ... у меня уже 04:51 ... вот это "поздно"

 
Artyom Trishkin:
  1. Цена установки ордера не нормализованная.
  2. Все цены нужно проверять на размер уровня StopLevel - если дистанция установки ордера в пунктах от цены меньше, чем значение StopLevel, то будет ошибка 130 - неверные стопы

Цену нормализовал, но советник так же открывает один ордер, потом не открывает.Думаю тут проблема не в StopLevel, т.к. он все же один ордер открывает. Но на следующих тиках пишет ошибку

#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#include  <Init_Deinit.mqh> 

// Переменные
extern double lots    = 0.01;
extern int    Level   = 300;
extern double StopL   = 300;
extern double TakeP   = 1000;


// Start Programm
void OnTick() 
  { 
  //--- вычисленные значений для BuyStop
   
   double price_buystop=NormalizeDouble (Ask+Level*Point, Digits);
   StopL =NormalizeDouble(price_buystop-StopL*Point,Digits); 
   TakeP =NormalizeDouble(price_buystop+TakeP*Point,Digits); 
   
//--- Размещаем отложный ордер BuyStop
   int ticket=OrderSend(Symbol(),OP_BUYSTOP,lots,price_buystop,3,StopL,TakeP,"Rupture",1111,0,clrGreen); 
   if(ticket<0) 
     { 
      Print("BuyStop завершилась с ошибкой #",GetLastError()); 
          } 
   else 
      Print("Функция BuyStop успешно выполнена"); 
      }
 
Doszhan:

Цену нормализовал, но советник так же открывает один ордер, потом не открывает.Думаю тут проблема не в StopLevel, т.к. он все же один ордер открывает. Но на следующих тиках пишет ошибку

Нужна проверка, если цена находится на расстоянии меньше чем стоплевел или спред, то тут конечно будет ошибка. Это первое.

Судя по текстовке у вас нет проверки на то, открыт уже ордер или нет.

А так он будет у вас открывать до бесконечности на каждом тике.

 
Oleg Kolesov:

   H=iCustom(NULL,TF,"::Indicators\\KChange.ex4",History,Period_1,Period_2,MA_method,0,1);

Компилятор ошибок не нашел, но тестер намного медленнее работает? Это нормально?

//-----------------------------------------------------------------------------------------------------------------

В справочнике MQL4 указано: ссылка на переменные в функции инициализации?

Ссылка на переменные индикатора в функции инициализации, не в функции start? Опытные люди подскажите пожалуйста!

если медленно, то нужно оптимизировать-ускорять индикатор

вызывать нужно там где нужно проверять значения индикатора, в инициализации будет получено только одно значение

 
nalyk:

Вы ищите фрактал на третьем баре, его там может не быть. Ищите в цикле первый фрактал.


 

Так тоже не получается. Ордер выставляется из расчета хай лоу 2 свечи.
 
Valerius:

Нужна проверка, если цена находится на расстоянии меньше чем стоплевел или спред, то тут конечно будет ошибка. Это первое.

Судя по текстовке у вас нет проверки на то, открыт уже ордер или нет.

А так он будет у вас открывать до бесконечности на каждом тике.

Вот именно, он не открывается на каждом тике, он открывается всего лишь один раз.
 
Doszhan:
Вот именно, он не открывается на каждом тике, он открывается всего лишь один раз.

В журнале ошибка 130 ?

Выше объяснение откуда она берётся, и как сделать правильно, чтобы её не было.

Вы не сделали.

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