для metatreder 4
использую советника который сигнализирует на отклонение от цены открытия в любую сторону на 10 пунктов
и если сработал стоплосс. неработает как задумал если поставить на несколько графиков. пока не разобрался как сделать.
а так же использую скрипт для закрытия предыдущего ордера и сразуже открытия нового
исправте мне мои кривые руки))))
надо чтоб сигнал срабатывал адекватно на каждом из графиков eurusd eurjpy eurcad gbpjpy
было бы круто еслиб график на котором срабатывал сигнал как то визуально отмечался.
спасибо всем кто поможет подучиться .
Советник лучше сделать индикатором.
#property indicator_chart_window extern int Distance = 10; // в пп. для 4-рёх знаков double gd_Distance; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { int li_Decimal = 1; //---- indicators if (Digits % 2 == 1) li_Decimal = 10; gd_Distance = Distance * li_Decimal * Point; //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int total = OrdersTotal(), li_ord = 0; if (total == 0) return (0); double lda_Price[2]; lda_Price[0] = Bid; lda_Price[1] = Ask; for (int li_ORD = total - 1; li_ORD >= 0; li_ORD--) { if (!OrderSelect (li_ORD, SELECT_BY_POS, MODE_TRADES)) continue; if (OrderSymbol() != Symbol()) continue; if (OrderType() > 1) continue; li_ord++; if (MathAbs (lda_Price[OrderType()] - OrderOpenPrice()) > gd_Distance) { Alert ("На ", Symbol(), " цена вышла из коридора !!!"); PlaySound ("alert.wav"); break; } } if (li_ord == 0) { Alert ("На ", Symbol(), " отсутствуют ордера !!!"); PlaySound ("stops.wav"); return (0) ; } return (0); } //+------------------------------------------------------------------+
благодарю!
еще такой вопрос.
бывает, при исполнении моего скрипта после закрытия позиции новая не открываеться. говорит что цена устарела. это почему происходит?
благодарю!
еще такой вопрос.
бывает, при исполнении моего скрипта после закрытия позиции новая не открываеться. говорит что цена устарела. это почему происходит?
Ваш код будет работать до момента использования на нескольких инструментах. Иначе нужно проводить фильтрацию ордеров по Символу:
#include <stdlib.mqh> // Библиотека с кодами ошибок int start() { bool result, lb_InvalidSTOP; double price; int cmd, error1; for (int li_ORD = OrdersTotal() - 1; li_ORD >= 0; li_ORD--) { if (!OrderSelect (li_ORD, SELECT_BY_POS, MODE_TRADES)) continue; if (OrderSymbol() != Symbol()) continue; if (OrderType() > 1) continue; while (IsTradeAllowed() == true) { if (!IsExpertEnabled() || IsStopped()) return (0); if (OrderType() == OP_BUY) price = Bid; else price = Ask; result = OrderClose (OrderTicket(), OrderLots(), price, 3, CLR_NONE); if (!result) { if (fErrorHandling (GetLastError(), lb_InvalidSTOP)) {return (0);} RefreshRates(); } else break; } } RefreshRates(); int ticket = OrderSend (Symbol(), OP_SELL, 0.01, Bid, 3, Ask+100*Point, 0, "SELL 1", 255, 0, CLR_NONE); if (ticket < 1) {Print ("Error = ", ErrorDescription (GetLastError())); return;} else { OrderSelect (ticket, SELECT_BY_TICKET); OrderPrint(); } PlaySound ("alert.wav"); return (0); } //IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+ //| Автор : TarasBY | //+-----------------------------------------------------------------------------------+ //| Функция обрабатывает ошибки | //IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+ bool fErrorHandling (int fi_Error, bool& fb_InvalidSTOP) { //---- if (fi_Error == 0) return (true); switch (fi_Error) { case 4: /*ERR_SERVER_BUSY*/ case 137: /*ERR_BROKER_BUSY*/ case 139: /*ERR_ORDER_LOCKED*/ case 146: /*ERR_TRADE_CONTEXT_BUSY*/ Sleep (500); return (false); case 6: /*ERR_NO_CONNECTION*/ fReConnect(); Sleep (1000); return (false); case 135: /*ERR_PRICE_CHANGED*/ case 136: /*ERR_OFF_QUOTES*/ case 138: /*ERR_REQUOTE*/ Sleep (1); return (false); case 129: /*ERR_INVALID_PRICE*/ fb_InvalidSTOP = true; Print ("Не правильные цены - err № ", fi_Error); return (false); case 130: /*ERR_INVALID_STOPS*/ fb_InvalidSTOP = true; Print ("Не правильные стопы - err № ", fi_Error); return (false); case 4109: /*ERR_TRADE_NOT_ALLOWED*/ Print ("TRADE NOT ALLOWED ! SWITCH ON option \' Allow live trading\' (Необходимо включить опцию \'Разрешить советнику торговать\')"); return (true); default: Print (OrderTicket(), ": Критическая ошибка № ", ErrorDescription (fi_Error)); return (true); } //---- return (true); }

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
для metatreder 4
использую советника который сигнализирует на отклонение от цены открытия в любую сторону на 10 пунктов
и если сработал стоплосс. неработает как задумал если поставить на несколько графиков. пока не разобрался как сделать.
а так же использую скрипт для закрытия предыдущего ордера и сразуже открытия нового
исправте мне мои кривые руки))))
надо чтоб сигнал срабатывал адекватно на каждом из графиков eurusd eurjpy eurcad gbpjpy
было бы круто еслиб график на котором срабатывал сигнал как то визуально отмечался.
спасибо всем кто поможет подучиться .