Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1417

 
Sergey Li #:

всем доброго времени суток.

подскажите как можно решить проблему

есть класс который обрабатывает позиции и ордера и сверяет их с базой

нужно из этого класса передать СТРУКТУРЫ (string, double, int, string .....)

чем это можно сделать

и если можно ссылку на пример

Примеры есть в стандартной библиотеке. 

Документация по MQL5: Стандартная библиотека / Торговые классы / CTrade / Result
Документация по MQL5: Стандартная библиотека / Торговые классы / CTrade / Result
  • www.mql5.com
Result(MqlTradeResult&) - CTrade - Торговые классы - Стандартная библиотека - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
перед отправкой ордера нужна проверка когда был открыта последняя позиция по символу, что будет быстрее в истории посмотреть или в глобальной переменной терминала?
 
lynxntech #:
перед отправкой ордера нужна проверка когда был открыта последняя позиция по символу, что будет быстрее в истории посмотреть или в глобальной переменной терминала?

Быстрей чем в переменной быть не может. Только одна поправка: для сохранения при перезапуске терминала можно пользоваться и глобальной переменной терминала, и перелопатить историю в OnInit(). Но когда переходите в OnTick() то это значение должно быть в переменной глобального уровня, но не глобальной терминала. 

 
Alexey Viktorov #:

Быстрей чем в переменной быть не может. Только одна поправка: для сохранения при перезапуске терминала можно пользоваться и глобальной переменной терминала, и перелопатить историю в OnInit(). Но когда переходите в OnTick() то это значение должно быть в переменной глобального уровня, но не глобальной терминала. 

неужели глобальная переменная Терминала работает так медленно, ведь она должна храниться в такой же памяти как и обычная, это же не гигантский объем информации который запрашивается с диска при необходимости

 
lynxntech #:

неужели глобальная переменная работает так медленно, ведь она должна храниться в такой же памяти как и обычная, это же не гигантский объем информации который запрашивается с диска при необходимости

Если грубо, то глобальная переменная терминала это почти как файл. Иначе где она хранится когда комп выключен? А переменная глобального уровня, доступная из любого места программы это переменная в памяти. Естественно она быстрей.

Получается, что при новом открытии лучше записать и в переменную глобального уровня, и в глобальную переменную терминала для восстановления после перезагрузки терминала. Но пока терминал работает проверку вести по переменной глобального уровня.

 
Alexey Viktorov #:

Если грубо, то глобальная переменная терминала это почти как файл. Иначе где она хранится когда комп выключен? А переменная глобального уровня, доступная из любого места программы это переменная в памяти. Естественно она быстрей.

Получается, что при новом открытии лучше записать и в переменную глобального уровня, и в глобальную переменную терминала для восстановления после перезагрузки терминала. Но пока терминал работает проверку вести по переменной глобального уровня.

т.е. в OnDeinit проверять историю и записывать в глобальную Терминала?

в идеале, то в текстовой виде там инфы на пару байтов, разве она не содержится в доступности как обычные переменные, т.е. в RAM?

в OnInit считали, запись в RAM, и дальше при обновлении переменной перезапись

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

 
lynxntech #:

т.е. в OnDeinit проверять историю и записывать в глобальную Терминала?

в идеале, то в текстовой виде там инфы на пару байтов, разве она не содержится в доступности как обычные переменные, т.е. в RAM?

в OnInit считали, запись в RAM, и дальше при обновлении переменной перезапись

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

Кто говорил о ковырянии истории в OnDeinit()?

Я говорил о необходимости переменную продублировать в переменную терминала при очередном открытии позиции…

 
Alexey Viktorov #:

Кто говорил о ковырянии истории в OnDeinit()?

Я говорил о необходимости переменную продублировать в переменную терминала при очередном открытии позиции…

это все можно сделать, вопрос был к тем кто замерил реально работу, и лучше к разработчикам, кто знает что у них там в планах

экспериментировать не хочется, есть много других задач.

 

Всем добрый вечер уважаемые программисты!

Помогите решить простую задачу. Есть код от MQL4 . Хочу его адаптировать под 5-рку. То есть чтобы аналогично работал на MQL5.


//Введем внешнюю переменную, чтобы иметь возможность изменить количество сканируемых свечей.
extern int Window=30;
 
void OnStart()
{
   //Вводим переменные.
   double Highest=High[0];
   double Lowest=Low[0];
 
   //Сканируем 30 свечей и обновляем значения самых высоких и самых низких цен.
   for(int i=0; i<=Window; i++) {
   if(Low[i]<Lowest) Lowest=Low[i];
   if(High[i]>Highest) Highest=High[i];  
}
 
   //Выводим результат.
   Alert("Самая высокая цена ",Highest," - Самая низкая цена ",Lowest);
}



Мой вариант явно не проходит, почему-то много ошибок): 

//Введем внешнюю переменную, чтобы иметь возможность изменить количество сканируемых свечей.
extern int Window=30;
 
 
void OnStart()
{

double   o = iOpen(NULL, PERIOD_CURRENT, 0);
double   h = iHigh(NULL, PERIOD_CURRENT, 0);
double   l = iLow(NULL, PERIOD_CURRENT, 0);
double   c = iClose(NULL, PERIOD_CURRENT, 0);

double Highest=h;
double Lowest=l;

   //Сканируем 30 свечей и обновляем значения самых высоких и самых низких цен.
     
   for(int i=0; i<=Window; i++) 
{
   if  ( l[i] < Lowest ) 
   Lowest=[i];
  

   if  ( h[i] > Highest ) 
   Highest=[i];  
  
}
 
   //Выводим результат.
   Print("Самая высокая цена ",Highest,
         " - Самая низкая цена ",Lowest);
}
 
 
Alexey Belyakov #:

Всем добрый вечер уважаемые программисты!

Помогите решить простую задачу. Есть код от MQL4 . Хочу его адаптировать под 5-рку. То есть чтобы аналогично работал на MQL5.


посмотрите в справке 

iHigh

и подобные функции

если не работает, в цикле ошибка

да и не видно в какую переменную добавляете данные

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