Странно. Выставил в терминале в "Настройки -> Графики" 5000 баров максимум. Перезагрузил терминал, при наведении на вкладку с символом показывается, что 5000 баров.
С учётом подсказок от участников форума, за что им большое СПАСИБО, получился вот такой вариант скрипта:
С уважением, Владимир.
Совсем упустил в скрипте один очень важный момент. Нужно было нормализовать лот. Вот исправленный вариант:
//+------------------------------------------------------------------+//| Lot_Size_Depending_On_Risk_And_SL.mq5 |//| Copyright 2023, MetaQuotes Ltd. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2023, MetaQuotes Ltd."#property link"https://www.mql5.com"#property version"1.00"#property script_show_inputsinputuint Risk=6; // Размер риска (> 0, но не более 100 %)inputuint Stop_Loss=1000; // Размер стоп-лосса (> 0, но не более 4294967295)//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+double Lot_Size_Depending_On_Risk_And_SL()
{
//--- блок проверки входных параметров на корректностьif(Risk==0 || Risk>100 || Stop_Loss==0)
{
Print("<===== Введены не корректные размеры риска и/или стоп-лосса! =====>");
return(0.0);
}
//--- блок определения размера лотаdouble trading_account_currency=SymbolInfoDouble(_Symbol,SYMBOL_POINT)*
SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)/
SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE);
double lot=NormalizeDouble((AccountInfoDouble(ACCOUNT_MARGIN_FREE)*Risk*0.01)/
(Stop_Loss*trading_account_currency),2);
//--- блок проверки размера лота на минимум и максимум от возможногоdouble min_volume=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN);
double max_volume=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX);
if(lot<min_volume)
lot=min_volume;
if(lot>max_volume)
lot=max_volume;
//--- блок расчёта минимального шага изменения объёма необходимого для заключения сделкиdouble step_volume=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP);
int ratio=(int)MathRound(lot/step_volume);
if(MathAbs(ratio*step_volume-lot)>0.0000001)
lot=ratio*step_volume;
return(lot);
}
//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
//---Print(DoubleToString(Lot_Size_Depending_On_Risk_And_SL(),2));
}
//+------------------------------------------------------------------+
По окончании форвард-тестирования робота столкнулся с постоянной проблемой: при запуске одиночного теста с наилучшим набором параметров тестер стратегий начинает его выполнять и, похоже, выполняет до конца (судя по движку-указателю хода процесса), но потом зависает. Приходится метатрейдер перезапускать и результаты одиночного теста (да и всего форвард-тестирования в целом) оказываются потеряны.
Знатоки, подскажите: как на платформе настроить отражение истории сделок не по всем тайм-фреймам, а лишь на некоторых ? А то что сейчас имеем: нажимаем галочку "показывать историю торговли" и вся история (стрелки вверх-вниз) уже на недельном графике стоят сплошным забором. А хотелось бы настройку, как у других инструментов (линии тренда, стрелки, и т.п.), показ которых можно настроить не на всех таймах.
Добрый день. Подскажите где посмотреть самый простейший пример советника основанного на пересечении двух МА(можно урок). Одну я знаю как добавить. Не хочется делать простой копи паст и удлинять код, знаю есть другие методы. Если на MQL4 у меня вопрос не возникло, то в MQL5, не до конца могу понять как это сделать.
Добрый день. Подскажите где посмотреть самый простейший пример советника основанного на пересечении двух МА(можно урок). Одну я знаю как добавить. Не хочется делать простой копи паст и удлинять код, знаю есть другие методы. Если на MQL4 у меня вопрос не возникло, то в MQL5, не до конца могу понять как это сделать.
Здравствуйте. Откройте MetaEDitor 5. В нём есть встроенный (штатный) советник, основанный на пересечении двух МА. Открывайте код и изучайте. Либо в CodeBase поищите. Вот, например, первый попавшийся советник построенный на пересечении двух МА.
Здравствуйте. Откройте MetaEDitor 5. В нём есть встроенный (штатный) советник, основанный на пересечении двух МА. Открывайте код и изучайте. Либо в CodeBase поищите. Вот, например, первый попавшийся советник построенный на пересечении двух МА.
Показываю только один вариант написания советника, а таких вариантов могут быть огромное количество. Всё зависит от квалификации программиста. Структура советника может выглядеть примерно так:
//+------------------------------------------------------------------+//| 1.mq5 |//| Copyright 2023, MetaQuotes Ltd. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2023, MetaQuotes Ltd."#property link"https://www.mql5.com"#property version"1.00"//+------------------------------------------------------------------+//| Input variables |//+------------------------------------------------------------------+// здесь размещаем входные параметры советника//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
// здесь инициализируем то, что считаем нужнымreturn(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
// здесь деинициализируем то, что считаем нужным
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
//--- абстрактный пример советника
Check_Trading(); // проверим условия разрешающие торговлю
Signal_Up(); // ищем сигнал для открытия длинной позиции
Open_Buy_Position(); // открываем длинную позицию
Close_Buy_Positions(); // закрываем длинную позицию
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+void Check_Trading()
{
// здесь вставляем условия разрешающие торговлю
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+void Signal_Up();
{
// здесь вставляем условия, при которых появляется сигнал на покупку
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+void Open_Buy_Position();
{
// здесь вставляем функцию открытия длинной позиции
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+void Close_Buy_Positions();
{
// здесь вставляем функцию закрытия длинной позиции
}
//+------------------------------------------------------------------+
Как-то так. Ещё раз подчёркиваю - это не руководство по написанию советников, а примерная структура, которой придерживаюсь при написании своих советников.
клиент включает терминал и советник у него вываливается :-)
потому что есть ситуации когда ACCOUNT_LOGIN=0
Если нужно надёжно и качественно, то это на фриланс.
Странно. Выставил в терминале в "Настройки -> Графики" 5000 баров максимум. Перезагрузил терминал, при наведении на вкладку с символом показывается, что 5000 баров.
А вот такой код:
выводит информацию о 6201 баре.
Это правильно? Я ожидал также в rates_total будет 5000.
выводит информацию о 6201 баре
Что напишет на это?
Скорее всего история больше для тестера, чтобы в нем правильно рассчитывались индикаторыС учётом подсказок от участников форума, за что им большое СПАСИБО, получился вот такой вариант скрипта:
С уважением, Владимир.
Совсем упустил в скрипте один очень важный момент. Нужно было нормализовать лот. Вот исправленный вариант:
С уважением, Владимир.
А то что сейчас имеем: нажимаем галочку "показывать историю торговли" и вся история (стрелки вверх-вниз) уже на недельном графике стоят сплошным забором.
А хотелось бы настройку, как у других инструментов (линии тренда, стрелки, и т.п.), показ которых можно настроить не на всех таймах.
Добрый день. Подскажите где посмотреть самый простейший пример советника основанного на пересечении двух МА(можно урок).
Одну я знаю как добавить. Не хочется делать простой копи паст и удлинять код, знаю есть другие методы.
Если на MQL4 у меня вопрос не возникло, то в MQL5, не до конца могу понять как это сделать.
Добрый день. Подскажите где посмотреть самый простейший пример советника основанного на пересечении двух МА(можно урок).
Одну я знаю как добавить. Не хочется делать простой копи паст и удлинять код, знаю есть другие методы.
Если на MQL4 у меня вопрос не возникло, то в MQL5, не до конца могу понять как это сделать.
Здравствуйте. Откройте MetaEDitor 5. В нём есть встроенный (штатный) советник, основанный на пересечении двух МА. Открывайте код и изучайте. Либо в CodeBase поищите. Вот, например, первый попавшийся советник построенный на пересечении двух МА.
С уважением, Владимир.
Здравствуйте. Откройте MetaEDitor 5. В нём есть встроенный (штатный) советник, основанный на пересечении двух МА. Открывайте код и изучайте. Либо в CodeBase поищите. Вот, например, первый попавшийся советник построенный на пересечении двух МА.
С уважением, Владимир.
Спасибо, посмотрел.
в OnInit я примерно понимаю, что происходит.
как это потом все правильно прикрутить к OnTick?
Спасибо, посмотрел.
в OnInit я примерно понимаю, что происходит.
как это потом все правильно прикрутить к OnTick?
Показываю только один вариант написания советника, а таких вариантов могут быть огромное количество. Всё зависит от квалификации программиста. Структура советника может выглядеть примерно так:
Как-то так. Ещё раз подчёркиваю - это не руководство по написанию советников, а примерная структура, которой придерживаюсь при написании своих советников.
С уважением, Владимир.