Советники: Мультивалютный советник на основе кластерного индикатора (третья версия) - страница 7
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Если чуть-чуть подправить вот здесь:
Добавить маленькую функцию:
В init() довнести маленький массивчик:
то функция void oper_up (int top, int down, double l, int s, int p, bool cl, bool ops, int mn)
значительно упростится:
void oper_up (int top, int down, double l, int i_SL, int i_TP, bool cl, bool ops, int mn) { int li_OP[2], k, no_open, cmd, cnt; string comment, cur_Val, ls_Sym[2]; double ld_price, ld_sl, ld_tp, ld_ask, ld_bid, ld_point, ld_digits; color lc_color; comment = StringConcatenate ("(", val[top], val[down], ")"); for (cnt = 0; cnt < 2; cnt++) { li_OP[cnt] = -1; ls_Sym[cnt] = ""; } if (down != top) { if (top == 0) { ls_Sym[0] = Symbol_List[top]; cur_Val = val[down]; } if (top > 0 && top < cnt_SMB) { if (ccfp[0,1] < ccfp[top,1]) {ls_Sym[0] = Symbol_List[top];} cur_Val = val[top]; if (down != 0) { if (ccfp[0,1] > ccfp[down,1]) {ls_Sym[1] = val[down];} } } } if (ls_Sym[0] != "") {li_OP[0] = fGetOP (ls_Sym[0], cur_Val);} if (ls_Sym[1] != "") {li_OP[1] = fGetOP (ls_Sym[1], cur_Val);} //************************** for (cnt = 0; cnt < 2; cnt++) { // Проверка на наличие открытых ордеров в одном направлении for (k = OrdersTotal() - 1; k >= 0; k--) { OrderSelect (k, SELECT_BY_POS); if (OrderSymbol() == ls_Sym[cnt] && OrderType() == li_OP[cnt] && OrderMagicNumber() == mn) {ls_Sym[cnt] = "";} } if (ls_Sym[0] == "" && ls_Sym[1] == "") {return (0);} //Проверка сигнала на CFP if (ls_Sym[cnt] != "" && li_OP[cnt] == BUY && iCustom (ls_Sym[cnt], 0, "CFP", 0, bars) <= iCustom (ls_Sym[cnt], 0, "CFP", 0, bars + 1)) {Print ("Сигнал по ", ls_Sym[cnt], " ", li_OP[cnt], " не подтвержден!"); ls_Sym[cnt] = "";} if (ls_Sym[cnt] != "" && li_OP[cnt] == SELL && iCustom (ls_Sym[cnt], 0, "CFP", 0, bars) >= iCustom (ls_Sym[cnt], 0, "CFP", 0, bars + 1)) {Print ("Сигнал по ", ls_Sym[cnt], " ", li_OP[cnt], " не подтвержден!"); ls_Sym[cnt] = "";} if (ls_Sym[0] == "" && ls_Sym[1] == "") {return (0);} //////////////Закрываем открытые ордера по обратному сигналу (если разрешено) if (cl) { for (k = OrdersTotal() - 1; k >= 0; k--) { OrderSelect (k, SELECT_BY_POS); if (ls_Sym[cnt] != "") { if (OrderSymbol() == ls_Sym[cnt] && OrderType() != li_OP[cnt] && OrderMagicNumber() == mn) { lc_color = IIFc (OrderType() == OP_BUY, Green, Magenta); if (OrderType() == OP_BUY) { OrderCloseReliable (OrderTicket(), OrderLots(), MarketInfo (OrderSymbol(), MODE_BID), Slip, lc_color); Print ("Закрываем ", OrderSymbol(), " ", OrderType()," ", comment); } if (OrderType() == OP_SELL) { OrderCloseReliable (OrderTicket(), OrderLots(), MarketInfo (OrderSymbol(), MODE_ASK), Slip, lc_color); Print ("Закрываем ", OrderSymbol(), " ", OrderType()," ", comment); } } } } } //Открываем ордера if (ops && ls_Sym[cnt] != "") { no_open = 0; cmd = IIFd (li_OP[cnt] == BUY, 1, -1); lc_color = IIFc (li_OP[cnt] == BUY, Blue, Red); ld_ask = MarketInfo (ls_Sym[cnt], MODE_ASK); ld_bid = MarketInfo (ls_Sym[cnt], MODE_BID); ld_point = MarketInfo (ls_Sym[cnt], MODE_POINT); ld_digits = MarketInfo (ls_Sym[cnt], MODE_DIGITS); ld_price = IIFd (li_OP[cnt] == BUY, ld_ask, ld_bid); ld_sl = NormalizeDouble (IIFd (StopLoss == 0, 0, ld_price - cmd * i_SL * ld_point), ld_digits); ld_tp = NormalizeDouble (IIFd (TakeProfit == 0, 0, ld_price + cmd * i_TP * ld_point), ld_digits); if (i_SL <= MarketInfo (ls_Sym[cnt], MODE_STOPLEVEL)) {Print ("Стоп-лосс по инструменту ", ls_Sym[cnt], " меньше разрешенного ДЦ!!!"); no_open = 1;} if (i_TP <= MarketInfo (ls_Sym[cnt], MODE_STOPLEVEL)) {Print ("Тейк-профит по инструменту ", ls_Sym[cnt], " меньше разрешенного ДЦ!!!"); no_open = 1;} if (MarketInfo (ls_Sym[cnt], MODE_TRADEALLOWED) != 1) {Print ("Торговля по инструменту ", ls_Sym[cnt], " запрещена ДЦ!!!"); no_open = 1;} if (no_open == 0) { Print ("Открываем ", ls_Sym[cnt]," ", li_OP[cnt]," ", comment); OrderSendReliable (ls_Sym[cnt], li_OP[cnt], l, ld_price, Slip, ld_sl, ld_tp, comment, mn, 0, lc_color); } } } }
И ещё хочется спросить автора: "Кто ж Вас так напугал, что Вы ставите Slip в размере 10000???"
И где же Ваши заработки будут, если Вы готовы отдать Брокеру по 10 000 пунктов при открытии и закрытии позиции??? Мазахизм какой-то... ;)
Как показывает опыт, сколько не увеличмвай slip, при неспокойном рынке Ваша позиция или не откроется или не закроется в зависимости от Ваших намерений... :)
Для борьбы с реквотами используются другие "механизмы"...
Заметил странность. В комментарии лота написано EURAUD, на графике видно, что должна сработать пара EURAUD, но лот открыт по EURUSD. Так должно быть?
ДА так должно быть. Советник ищет пересечения по валютам, а потом открывает сделки пар, в которых есть USD
evbut, действительно, перечитал комментарии, понял. Спасибо!
Изменил маленько представленный советник!
Торгует по кросам - открывает позицию по самой слабой и сильной валютам. Стоп лосс и тейк профит считаются по ATR.
Вот результат за 2 месяца на Demo. По полученным результатам думаю стоит продолжить работу с Ccfp.
Изменил маленько представленный советник!
Торгует по кросам - открывает позицию по самой слабой и сильной валютам. Стоп лосс и тейк профит считаются по ATR.
Вот результат за 2 месяца на Demo. По полученным результатам думаю стоит продолжить работу с Ccfp.
я думаю выражу общее мнение - скиньте пожалуйта на всеобщее тестирование данную версию. зарание благодарен.
Прошу прощения...
В данном советнике для контроля используется не СС, а CFP. я как то совсем забыл про это:)
Взять можно здесь http://slil.ru/28803747
а где можно найти индикатор CFP по этой ссылке пишется что файл не найден.