Форум » Консультации по программированию » Я в шоке! Подскажите. » Ответить

Я в шоке! Подскажите.

Sergey: Всем привет! Я в шоке! Выпал из рынка на 3,5 месяца, а тут такие перемены. Игорь подскажи, где можно ознакомиться с изменениями в MQL4? Хотел перенести все данные на новый комп, но некоторые индикаторы после компиляции перестают работать. Вот один из них. http://gfile.ru/a8cCP Хотя не перекомпилированные файлы работают. Компиляция ошибок в коде не выявляет. Но при отладке выдается ошибка формирования массива стр.67. Но в чем ошибка не пойму. Буду благодарен, если найдешь время исправить.

Ответов - 203, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 All

Sergey: Игорь, подскажи, можно ли с помощью обработчика"CHARTEVENT_OBJECT_ENDEDIT — событие окончания редактирования текста в поле ввода графического объекта LabelEdit" задавать советнику значения типа double? Если ДА и если не сложно, напиши пример.

Scriptong: Sergey пишет: Игорь, подскажи, можно ли с помощью обработчика"CHARTEVENT_OBJECT_ENDEDIT — событие окончания редактирования текста в поле ввода графического объекта LabelEdit" задавать советнику значения типа double? Если ДА и если не сложно, напиши пример. В смысле, чтобы в обработчике void OnChartEvent(const int id, const long& lparam, const double& dparam, const string& sparam) параметр sparam был не строковый, а типа double? Если так, то нельзя такое делать. Да и не нужно. Ведь строку легко преобразовать в вещественное значение при помощи функции StringToDouble. Таким образом, алгоритм будет следующий: void OnChartEvent(const int id, const long& lparam, const double& dparam, const string& sparam) { if (sparam != MY_LABEL_EDIT) return; string text = ObjectGetString(0, sparam, OBJPROP_TEXT); double value = StringToDouble(text); }

Sergey: Scriptong пишет: параметр sparam был не строковый, а типа double? Нет. К примеру я хочу изменить лот советнику на поле графика, не вызывая настройки советника. Конкретный пример- встроенная функция "Торговля в один клик". Лот можно менять набирая текст на клавиатуре. То есть мне нужно вывести часть настроек советника в таблицу на графике цены, так чтобы их можно было задавать, а они подхватывались советником, как будто были изменены в настройках.


Scriptong: Sergey пишет: Нет. К примеру я хочу изменить лот советнику на поле графика, не вызывая настройки советника. Конкретный пример- встроенная функция "Торговля в один клик". Лот можно менять набирая текст на клавиатуре. То есть мне нужно вывести часть настроек советника в таблицу на графике цены, так чтобы их можно было задавать, а они подхватывались советником, как будто были изменены в настройках. Посмотрите сам пример. Именно этому случаю он и соответствует.

Sergey: Scriptong пишет: Посмотрите сам пример. Именно этому случаю он и соответствует. Игорь, огромное спасибо! Разобрался. Сделал тестовый советник под это дело, все получилось.

Sergey: Игорь, подскажи в чем проблема.... Вот часть кода из советника #define NumOrd 1 // Количество элементов массива (стратегий) struct OrdInfo { double isPrice; double isSL; double isTP; double isLot; int isTicket; int isType; int isMagic; string isComment; }; OrdInfo g_ordInfo|NumOrd|; //---- void Terminal() { Qnt=0; // Счётчик количества ордеров //---- for(int i=0; i<OrdersTotal(); i++) // По рыночн. и отлож. ордерам { if(OrderSelect(i,SELECT_BY_POS)==true //Если есть следующ. && OrderSymbol()==Symbol() //.. и наша вал.пара && OrderMagicNumber()!=0 && OrderMagicNumber()<=NumOrd) //.. и он открыт экспертом { Alert("1"); g_ordInfo|i|.isPrice = OrderOpenPrice(); // Цена открытия ордера Alert("2"); g_ordInfo|i|.isSL=OrderStopLoss(); // Стоп-лосс ордера g_ordInfo|i|.isTP=OrderTakeProfit(); // Тейк-профит ордера g_ordInfo|i|.isLot=OrderLots(); // Количество лотов g_ordInfo|i|.isTicket=OrderTicket(); // Номер ордера g_ordInfo|i|.isType=OrderType(); // Тип ордера g_ordInfo|i|.isMagic=OrderMagicNumber(); // ID ордера g_ordInfo|i|.isComment=OrderComment(); // Комментарий ордера Qnt++; // Колич. ордеров } } } Советник прекрасно работает в тестере стратегий. Однако в реале зависает между метками 1 и 2. Причем комп не виснет, в журнале ничего. Но тики не проходят.

Scriptong: Sergey пишет: Советник прекрасно работает в тестере стратегий. Однако в реале зависает между метками 1 и 2. Причем комп не виснет, в журнале ничего. Но тики не проходят. Проблема в неправильной записи информации об ордерах в массив. Нумерация ордеров и нумерация элементов массива совпадает, а не должна бы. Поэтому в тестере и работает все прекрасно - там нет "чужих" ордеров, все свои. Правильная организация цикла такая: for(int i=0; i<OrdersTotal(); i++) // По рыночн. и отлож. ордерам { if(OrderSelect(i,SELECT_BY_POS)==true //Если есть следующ. && OrderSymbol()==Symbol() //.. и наша вал.пара && OrderMagicNumber()!=0 && OrderMagicNumber()<=NumOrd) //.. и он открыт экспертом { g_ordInfo[Qnt].isPrice = OrderOpenPrice(); // Цена открытия ордера g_ordInfo[Qnt].isSL=OrderStopLoss(); // Стоп-лосс ордера g_ordInfo[Qnt].isTP=OrderTakeProfit(); // Тейк-профит ордера g_ordInfo[Qnt].isLot=OrderLots(); // Количество лотов g_ordInfo[Qnt].isTicket=OrderTicket(); // Номер ордера g_ordInfo[Qnt].isType=OrderType(); // Тип ордера g_ordInfo[Qnt].isMagic=OrderMagicNumber(); // ID ордера g_ordInfo[Qnt].isComment=OrderComment(); // Комментарий ордера Qnt++; // Колич. ордеров } }

Sergey: Scriptong пишет: Правильная организация цикла такая: Огромное спасибо! Ведь все так явно, но почему-то только когда тебе ткнут пальцем. Понимаю, как не просто разбираться в чужих писульках... Спасибо!

Sergey: Блин! Проверил на реале в Alpfri все работает, а в FXOpen нет. Что за лажа?

Sergey: Нужно сделать описание объекта "кнопка". Рядом с объектом "кнопка" Установил "OBJ_LABEL" - "?". Как сделать, чтобы при наведении на "?" высвечивалось описание , а не имя объекта с ценой? Если выложите готовый блок алгоритма, буду очень признателен.

Scriptong: Sergey пишет: Нужно сделать описание объекта "кнопка". Рядом с объектом "кнопка" Установил "OBJ_LABEL" - "?". Как сделать, чтобы при наведении на "?" высвечивалось описание , а не имя объекта с ценой? Если выложите готовый блок алгоритма, буду очень признателен. Никакого алгоритма там нет. При создании кнопки нужно лишь воспользоваться назначением свойства всплывающей подсказки: ObjectSetInteger(0, name, OBJPROP_TOOLTIP, <текст подсказки>);

Sergey: Scriptong пишет: Никакого алгоритма там нет. При создании кнопки нужно лишь воспользоваться назначением свойства всплывающей подсказки:  цитата: ObjectSetInteger(0, name, OBJPROP_TOOLTIP, <текст подсказки>); Спасибо, на конец разобрался. ObjectSetString(0, name, OBJPROP_TOOLTIP, "текст"); Оказывается упускал первый параметр (chart_id) в результате получал ошибку и не мог понять в чем дело.

Sergey: Игорь, знаком ли ты с программой Forex Tester. Можно ли в ней тестировать индикаторы MQL4?

Scriptong: Sergey пишет: Игорь, знаком ли ты с программой Forex Tester. Можно ли в ней тестировать индикаторы MQL4? Да, и не только по наслышке. В 2009-ом году переводил для Forex Tester один из индикаторов MQL4. Тогда же писал рекламную статью для них в журнале Fortrader.ru (47-й номер) Sergey пишет: Можно ли в ней тестировать индикаторы MQL4? Нет, нельзя. Нужно переводить программы на Delphi или на C++. Но справедливости ради нужно сказать, что API Forex Tester'a намеренно копирует функционал MQL4. Там даже также функции называются. Поэтому чисто алгоритмически перевод не очень сложен.

Sergey: Scriptong пишет: Нужно переводить программы на Delphi или на C++. Спасибо.



полная версия страницы