Пробуйте. Только что-то не верится насчёт перерисовки... - на каждом тике вызывает сам-себя раз 300. Будет рисовать и вешать терем.
Обучение языку MQL4 под MetaTrader 4📌
От xbms, 13 апреля, 2013 в Уголок Программиста
Новый урок:
http://tradelikeapro.ru/mql4-vremya-na-poisk-oshibok/
Как зделать приоритет на нажатие кнопки? Если на заднем плане есть обьект, то он обязательно вылезет при нажатий на кнопку?
сам код
string S_button_2="Trade";
void F_Button_2()
{
ObjectCreate ("S_Buttom_2", OBJ_BUTTON, 0, 0, 0);
ObjectSetText("S_Buttom_2", S_button_2, 12, "LimeGreen11", clrBlack);
//ObjectSetInteger (0,"S_Buttom_2", OBJPROP_ZORDER, 10);
//ObjectSet ("S_Buttom_2", OBJPROP_BORDER_COLOR, clrBlack);
ObjectSet ("S_Buttom_2", OBJPROP_FONTSIZE, 12);
ObjectSet ("S_Buttom_2", OBJPROP_BGCOLOR, clrGold);
ObjectSet ("S_Buttom_2", OBJPROP_COLOR, clrBlack);
ObjectSet ("S_Buttom_2", OBJPROP_CORNER, 2);
ObjectSet ("S_Buttom_2", OBJPROP_STATE, state_2);
ObjectSet ("S_Buttom_2", OBJPROP_BACK, false);
ObjectSet ("S_Buttom_2" ,OBJPROP_XSIZE, 50);
ObjectSet ("S_Buttom_2", OBJPROP_YSIZE, 20);
ObjectSet ("S_Buttom_2", OBJPROP_XDISTANCE, 365);
ObjectSet ("S_Buttom_2", OBJPROP_YDISTANCE, 22);
//if(ObjectFind(0,"S_Buttom")==false)Print("Ошибка создание S_Buttom, код ошибки = ",GetLastError());
} Как зделать приоритет на нажатие кнопки?
ObjectSetInteger свойство OBJPROP_ZORDER:
Приоритет графического объекта на получение события нажатия мышки на графике (CHARTEVENT_CLICK). По умолчанию при создании значение выставляется равным нулю, но при необходимости можно повысить приоритет. При наложении объектов друг на друга событие CHARTEVENT_CLICK получит только один объект, чей приоритет выше остальных.
Всем привет, у меня вопрос к программистам, написал советник, сам не профи а только изучаю. Советник торгует по машке, ради интереса вставил в него условие на противоположный ордер если будет просадка. Вроде все работает, проверял каждую строчку, а теперь наткнулся на то чего вообще не могу понять. Как бы нет никакой ошибки при компиляции но задуманное почему-то не работает. А работать должно так: противоположный ордер набирает профит и выключается при условии, на сумму заработанного профита отключаются первые ордера которые в просадке, ну и т.д. Но вот именно этот момент не работает, вычислил откуда идет как бы конфликт: если отключить функцию IfOrderYetOpen, то начинает все работать, но при этом открываются несколько противоположных ордеров что не желательно, и ещё возможен какой-то логический конфликт этой функции с функцией ClosePosBySizeProfit.
Помогите пож-та разобраться)
Смысл не понятен, если заменить на другое слово, так должно быть?
Всем привет, у меня вопрос к программистам, написал советник, сам не профи а только изучаю. Советник торгует по машке, ради интереса вставил в него условие на противоположный ордер если будет просадка. Вроде все работает, проверял каждую строчку, а теперь наткнулся на то чего вообще не могу понять. Как бы нет никакой ошибки при компиляции но задуманное почему-то не работает. А работать должно так: противоположный ордер набирает профит и ЗАКРЫВАЕТСЯ при условии, на сумму заработанного профита ЗАКРЫВАЮТСЯ первые ордера которые в просадке, ну и т.д. Но вот именно этот момент не работает, вычислил откуда идет как бы конфликт: если отключить функцию IfOrderYetOpen, то начинает все работать, но при этом открываются несколько противоположных ордеров что не желательно, и ещё возможен какой-то логический конфликт этой функции с функцией ClosePosBySizeProfit.
Уважаемые комрады, вот строчка ведь неправильная же у товарища for(int i=OrdersTotal()-1; i>=0; i--), он последний ордер не учитывает, помоему нужно без -1 ?
Изменено 29 августа, 2018 пользователем vitek01
Уважаемые комрады, вот строчка ведь неправильная же у товарища for(int i=OrdersTotal()-1; i>=0; i--), он последний ордер не учитывает, помоему нужно без -1 ?
Да нет, все правильно. Выбор ордеров по позиции (SELECT_BY_POS) в списке всех открытых ордеров начинается с нуля. Таким образом, если OrdersTotal() вернул десять, то нумерация ордеров в списке будет идти от нуля до 9.
Мой вопрос вообще неразрешимый? =))
теоретически разрешимый, но практически интереса у публики не вызвал. Для начинающих - очень сложно, а для профи - скучно, ибо тупик там.Мой вопрос вообще неразрешимый?
теоретически разрешимый, но практически интереса у публики не вызвал. Для начинающих - очень сложно, а для профи - скучно, ибо тупик там.Мой вопрос вообще неразрешимый?
А я не собирался вводить в тупик, мой вопрос был технического характера, в процессе обучения пробовал менять условия и все получалось до этого момента, поэтому и попросил помощи. Это просто программный код в котором где-то что-то сломалось. Возможно он не принесет никакой выгоды, но мы же тут учимся и хотим все подняться на следующую ступеньку, так вот поэтому и хотелось бы знать где я споткнулся. Кто-то если поможет исправить ошибку, то я буду знать как это сделать и возможно этот советник уйдет в архив, а я получу опыт. Иначе зачем мы все здесь?!
Здесь никто никому не должен, ибо помощь не оплачивается, люди работают за интерес. Я гляну Вашу сову позже, может подскажу, сейчас времени нет.Кто-то если поможет исправить ошибку, то я буду знать как это сделать и возможно этот советник уйдет в архив, а я получу опыт. Иначе зачем мы все здесь?!
Подскажите, пожалуйста, что в этой строке не так?
datetime VL = ObjectGet("name",OBJPROP_TIME);
Хочу присвоить переменной координату времени расположения объекта.
Спасибо!
Подскажите, пожалуйста, что в этой строке не так?
datetime VL = ObjectGet("name",OBJPROP_TIME);
Хочу присвоить переменной координату времени расположения объекта.
Спасибо!
"ObjectGet
Возвращает значение указанного свойства объекта.
double ObjectGet( "
прям в справке написано.
Приведите значение к datetime.
Изменено 27 сентября, 2018 пользователем djnet
ObjectGetInteger(0,name,OBJPROP_TIME);Подскажите, пожалуйста, что в этой строке не так?
Подскажите, как в советнике сделать отображение в коментарии макс. просадку,
на которую проседал счёт, пока был запущен этот советник? fcplm
Просадка (Эквити минус балланс) отображается в комментарии.
Если просадка ещё опустилась - новое значение заменяет старое, и будет отображаться, пока не опуститься ещё ниже. и т.д.
в функции OnTick() :Подскажите, как в советнике сделать отображение в коментарии макс. просадку, на которую проседал счёт, пока был запущен этот советник?
static double MaxDD = 0;
if ( MaxDD это всё.
Извините. >D-b
В данном случае - нет разницы.
Единственное место, где нужно побольше скобочек это #define, подробнее в справке. Но в Вашем примере - разницы нет.вместо a=b; такую запись: a=(b);. или вместо a=OrderLots(); a=(OrderLots());. В чём разница?
Подскажите, как в коде прописать так, чтобы ордера открывались только при открытии бара, а в безубыток ордера можно было бы перевести в любое время?
Например так:Подскажите, как в коде прописать так, чтобы ордера открывались только при открытии бара, а в безубыток ордера можно было бы перевести в любое время?
OnTick(){
if ( OrderProfit() >= 0 ) SL2BU(); // переводим в БУ
if ( isNewBar() ) checkSignal(); // проверяем условия открытия
}
Ордер должен быть активен, функцию isNewBar() можно найти и здесь в теме и в инете.
всем привет! друзья помогите с решением как облегчить тяжелый советник.
заранее о оговорюсь что он использует расчеты нескольких индикаторов.
есть варианты того что бы могло помочь:
1. совместить все индикаторы в один?
2. переместить все расчеты в сову? но, хотя как я слышал от этого только хуже.
3.я использую 5-ти знак. может заставить расчеты считать по 4-му знаку?
пс. сам терминал облегчен. это, спасибо если что не интересует.
Универсальное решение- считывать показания индикаторов 1 раз в свечу.
Все остальное перечисленное , ИМХО, не поможет .(помещать код индикатора в свечу говорят поможет, но на сколько...)
Зависит от того что и как переносить - возьмём машку: в советнике Вы используете 2 значения на 2 и на 1 баре, а в индикаторе хранятся 1000 значений машки - есть смысл перенести расчёт в сову.2. переместить все расчеты в сову? но, хотя как я слышал от этого только хуже.
в советнике Вы используете 2 значения на 2 и на 1 баре, а в индикаторе хранятся 1000 значений машки - есть смысл перенести расчёт в сову.
0ll, хранение в индикаторе 1000 значений разве влияет на производительность? Память- да, отъедает... Но расчет первой тысячи, как правило, в OnInit происходит...
Или нет?
Для публикации сообщений создайте учётную запись или авторизуйтесь
Перейти к списку тем