Макар- большое спасибо, что подсказал какие проверки надо сделать чтобы избежать терзания сервера и бана советникаJ
Проверки сделал вот так
моде стоп левел для стопа
//ПРОВЕРКА НА МОДЕ СТОП ЛЕВЕЛ- МИНИМАЛЬНЫЙ УРОВЕНЬ СТОПА if(sl<MarketInfo(Symbol(),MODE_STOPLEVEL)) // ЕСЛИ СТОПОЛС МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО
{
sl= MarketInfo(Symbol(),MODE_STOPLEVEL);//СТОП ЛОССУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
}
моде стоп левел для профита
// ПРОВЕРКА ТЕЙК ПРОФИТА НА МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ УСТАНОВКИif(tp<MarketInfo(Symbol(),MODE_STOPLEVEL)) // ЕСЛИ ПРОФИТ МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО
{
tp= MarketInfo(Symbol(),MODE_STOPLEVEL);// ПРОФИТУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
}
//---- ПРОВЕРКА НА РАЗРЕШЕНИЕ ТОРГОВ ПЕРЕД ОТКРЫТИЕМ ОРДЕРОВif(MarketInfo(Symbol(),MODE_TRADEALLOWED)==true)
{// начало есл торговля разрешена/*
куча проверок на условия открытия и само открытие ордеров
*/
} // КОЕНЦ ПРОВЕРКИ НА РАЗРЕШЕНИЕ ТОРГОВЛИelse//ИНАЧЕ ЕСЛИ ТОРГОВЛЯ НЕ РАЗРЕШЕНА
{ // НАЧАЛО ЭЛС ЕСЛИ ТОРГИ НЕ РАЗРЕШЕНЫ Print("ТОРГИ НЕ РАЗРЕШЕНЫ- ПЫТАТЬСЯ ОТКРЫТЬ ОРДЕРА НЕ БУДЕМ");
} // КОЕНЦ ЭЛС ЕСЛИ ТОРГИ НЕ РАЗРЕШЕНЫ
Проверка на макс и мин лот
Вначале получил значение макс лот и мин лот в перемененные вот так
А потом где-то ниже по ходу написания Грааля делаю проверку
if(lot<Min_Lot) lot=Min_Lot; //ЕСЛИ ЛОТ ПОЛУЧИЛСЯ МЕНЬШЕ ЧЕМ МИНИМАЛЬНЫЙ ЛОТ У БРОКЕРА ТО ЛОТ ПРИСВАЕМАЕМ МИНИМАЛЬНЫЙ ЛОТ У БРОКЕРАif(lot>Max_Lot) lot=Max_Lot; //ЕСЛИ ЛОТ ПОЛУЧИЛСЯ БОЛЬШЕ ЧЕМ МАКСИМАЛЬНЫЙ ЛОТ У БРОКЕРА ТО ОЛТ ПРИСВАЕВАЕМ МАКС ЛОТ У БРОКЕРА
Верно я эти проверки прописал или где-то ошибся?
Проверку на шаг изменения лота не стал делать т.к лот рассчитывается в проценте от депозита и там это значение помножается на пойнт и нормализуется- значит эту проверку можно и опустить- правильно, или всё равно надо проверитиь? Если нужно всё равно проверить, то как написать эту проверку?
И суть всех этих проверок чтобы всегда было корректное значение стопа, профита, размера лота и чтобы впринципе можно было начинать открывать ордера. Если все эти параметры гуд то советник не будет насиловать сервер- правильно я понимаю всю эту кухню?
Макар- большое спасибо, что подсказал какие проверки надо сделать чтобы избежать терзания сервера и бана советникаJ
//ПРОВЕРКА НА МОДЕ СТОП ЛЕВЕЛ- МИНИМАЛЬНЫЙ УРОВЕНЬ СТОПА
// ПРОВЕРКА ТЕЙК ПРОФИТА НА МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ УСТАНОВКИ
Здесь может возникнуть ошибка 130 из-за проскальзывания.
Я бы сделал так
//ПРОВЕРКА НА МОДЕ СТОП ЛЕВЕЛ- МИНИМАЛЬНЫЙ УРОВЕНЬ СТОПА if(sl<MarketInfo(Symbol(),MODE_STOPLEVEL)*1.5) // ЕСЛИ СТОПОЛС МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО
{
sl= MarketInfo(Symbol(),MODE_STOPLEVEL)*1.5;//СТОП ЛОССУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
}
// ПРОВЕРКА ТЕЙК ПРОФИТА НА МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ УСТАНОВКИif(tp<MarketInfo(Symbol(),MODE_STOPLEVEL)*1.5) // ЕСЛИ ПРОФИТ МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО
{
tp= MarketInfo(Symbol(),MODE_STOPLEVEL)*1.5;// ПРОФИТУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
}
Всем здравствуйте! У кого-нибудь возникала проблема с висящими точками на графике, найденными через iHighest/iLowest?
Предыстория: опыт в программировании минимальный, пишу индикатор на mql4, который должен отображать точки на графике, найденные по условиям в if и соединять их линиями. Точки-то он, по логике, ищет правильно, а вот рисует их со смещениями, то на 2 бара, то на 3 бара уводит. Как с этим бороться? файл с кодом приложила тоже.
int start()
{
int counted_bars=IndicatorCounted(); //хранит количество посчитанных индикатором баров. Функция IndicatorCounted() возвращает количество неизмененных баров после прошлого вызова функции start().int n,limit;
int val_index;
if(counted_bars>0)
counted_bars--;
limit=Bars-counted_bars; //количество последних баров, которые нужно пересчитать.if(limit>barsToProcess)
limit=barsToProcess;
for(n=0; n<=limit; n++)
{
if((Close[n+1]>Open[n+1] && Open[n+2]>=Close[n+2]) || (Close[n+1]>Open[n+1] && Open[n+3]>Close[n+3]))
{
val_index=iLowest(NULL,0,MODE_LOW,3,n+1);
myAZBuffer[n]=Low[val_index];
ExtLowBuffer[n]=Low[val_index];
}
elseif((Open[n+1]>Close[n+1] && Close[n+2]>=Open[n+2]) || (Close[n+1]<Open[n+1] && Close[n+3]>Open[n+3]))
{
val_index=iHighest(NULL,0,MODE_HIGH,3,n+1);
myAZBuffer[n]=High[val_index];
ExtHighBuffer[n]=High[val_index];
}
}
return (0);
}
Всем здравствуйте! У кого-нибудь возникала проблема с висящими точками на графике, найденными через iHighest/iLowest?
Предыстория: опыт в программировании минимальный, пишу индикатор на mql4, который должен отображать точки на графике, найденные по условиям в if и соединять их линиями. Точки-то он, по логике, ищет правильно, а вот рисует их со смещениями, то на 2 бара, то на 3 бара уводит. Как с этим бороться? файл с кодом приложила тоже.
точки рисуются правильно, без смещения
если условие выполнено, а iHighest/iLowest больше или меньше текущих High / Low
если условие выполнено, а iHighest/iLowest больше или меньше текущих High / Low
то рисует
так, я кажется, начинаю осознавать свою ошибку) Получается, чтобы визуально отобразить на верном месте эти точки, мне надо ввести какой-то отдельный счетчик вместо n для myAZBuffer[n], ExtLowBuffer[n], ExtHighBuffer[n] ? но как это сделать
azolotta: так, я кажется, начинаю осознавать свою ошибку) Получается, чтобы визуально отобразить на верном месте эти точки, мне надо ввести какой-то отдельный счетчик вместо n для myAZBuffer[n], ExtLowBuffer[n], ExtHighBuffer[n] ? но как это сделать
нет, правильно понимаете.
в условии используются два или три бара из истории,
поэтому и рисует через 2-3 бара когда условие выполнено
в условии используются два или три бара из истории,
поэтому и рисует через 2-3 бара когда условие выполнено
ок, а как тогда переработать код, если мне надо, скажем, из последних 3-ёх баров (отвечающим условиям в if) выбрать самый высокий хай и на нём поставить точку (прямо на этом хае!), затем также найти точку лоу.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
MakarFX , а вот эта связка: какую функцию выполняет ?
input int BarTrade = 5; // понимаю что это кол-во отслеживаемых периодов их 5.
int TimeBarTrade=BarTrade*Period()*60; // а здесь как понять? почему именно на 60 умножается?
MakarFX , а вот эта связка: какую функцию выполняет ?
input int BarTrade = 5; // понимаю что это кол-во отслеживаемых периодов их 5.
int TimeBarTrade=BarTrade*Period()*60; // а здесь как понять? почему именно на 60 умножается?
BarTrade*Period()*60
количество баров * текущий таймфрем * 60 секунд
т.е. количество баров переводим в секунды
BarTrade*Period()*60
количество баров * текущий таймфрем * 60 секунд
т.е. количество баров переводим в секунды
Можно так.
Если исключить ошибки связанные с
MODE_STOPLEVEL, MODE_TRADEALLOWED, MODE_MINLOT, MODE_LOTSTEP, MODE_MAXLOT
то сов не будет долбить сервер
Макар- большое спасибо, что подсказал какие проверки надо сделать чтобы избежать терзания сервера и бана советникаJ
Проверки сделал вот так
моде стоп левел для стопа
моде стоп левел для профита
Проверка на разрешение торговых операций
Проверка на макс и мин лот
Вначале получил значение макс лот и мин лот в перемененные вот так
А потом где-то ниже по ходу написания Грааля делаю проверку
Верно я эти проверки прописал или где-то ошибся?
Проверку на шаг изменения лота не стал делать т.к лот рассчитывается в проценте от депозита и там это значение помножается на пойнт и нормализуется- значит эту проверку можно и опустить- правильно, или всё равно надо проверитиь? Если нужно всё равно проверить, то как написать эту проверку?
И суть всех этих проверок чтобы всегда было корректное значение стопа, профита, размера лота и чтобы впринципе можно было начинать открывать ордера. Если все эти параметры гуд то советник не будет насиловать сервер- правильно я понимаю всю эту кухню?
Макар- большое спасибо, что подсказал какие проверки надо сделать чтобы избежать терзания сервера и бана советникаJ
//ПРОВЕРКА НА МОДЕ СТОП ЛЕВЕЛ- МИНИМАЛЬНЫЙ УРОВЕНЬ СТОПА// ПРОВЕРКА ТЕЙК ПРОФИТА НА МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ УСТАНОВКИЗдесь может возникнуть ошибка 130 из-за проскальзывания.
Я бы сделал так
Всем здравствуйте! У кого-нибудь возникала проблема с висящими точками на графике, найденными через iHighest/iLowest?
Предыстория: опыт в программировании минимальный, пишу индикатор на mql4, который должен отображать точки на графике, найденные по условиям в if и соединять их линиями. Точки-то он, по логике, ищет правильно, а вот рисует их со смещениями, то на 2 бара, то на 3 бара уводит. Как с этим бороться? файл с кодом приложила тоже.
Всем здравствуйте! У кого-нибудь возникала проблема с висящими точками на графике, найденными через iHighest/iLowest?
Предыстория: опыт в программировании минимальный, пишу индикатор на mql4, который должен отображать точки на графике, найденные по условиям в if и соединять их линиями. Точки-то он, по логике, ищет правильно, а вот рисует их со смещениями, то на 2 бара, то на 3 бара уводит. Как с этим бороться? файл с кодом приложила тоже.
точки рисуются правильно, без смещения
если условие выполнено, а iHighest/iLowest больше или меньше текущих High / Low
то рисует
точки рисуются правильно, без смещения
если условие выполнено, а iHighest/iLowest больше или меньше текущих High / Low
то рисует
так, я кажется, начинаю осознавать свою ошибку) Получается, чтобы визуально отобразить на верном месте эти точки, мне надо ввести какой-то отдельный счетчик вместо n для myAZBuffer[n], ExtLowBuffer[n], ExtHighBuffer[n] ? но как это сделать
нет, правильно понимаете.
в условии используются два или три бара из истории,
поэтому и рисует через 2-3 бара когда условие выполнено
нет, правильно понимаете.
в условии используются два или три бара из истории,
поэтому и рисует через 2-3 бара когда условие выполнено