Народ, требуется ваша помощь.
Есть торговые условия вида, определены так: Покупать если %D линия стохастика пересекает отметку 30, при этом предыдущий бар должен быть ниже значения 29(получается отметка пересекается снизу вверх). В тестере я задал небольшой временной интервал на часовом тайм фрейме, чтобы посчитать количество сигналов вручную и сравнить с показаниями советника. Дожно получиться 6 сигналов, но советник просто выдает стену текста с сигналами на бай, а в идеале должно быть только 6.
Вот код советника, может кто подскажет что я делаю не правильно?
Перед новым ОрдерSend сделайте перевывчик.
А что нибудь более действенное? Говорю же, должны определяться только 6 сигналов за промежуток времени, а терминал на каждый сигнал выдает целый ворох ордеров.
А что нибудь более действенное? Говорю же, должны определяться только 6 сигналов за промежуток времени, а терминал на каждый сигнал выдает целый ворох ордеров.
// ???????? ???????? extern double TP = 100; extern double Lots = 0.1; extern double SL = 50; // ???????? ?????????? extern int Dperiod = 24; extern int Kperiod = 3; extern int Slowing = 6; extern int St_buy = 30; extern int St_sell = 70; int signal; int ticket; //============================================================== extern string MaxOrders_Desc = "если 0 количество одновременно открытых позиций не ограничивается 1-3"; extern int MaxOrders = 1; int Stoch(int st_bars = 0, int st_type = 0){ // 1 ???????? - ????, 2 ???????? - ??? ?????. int st_result; if (st_type == 0 || st_type == 1 && st_bars >= 0){ st_result = iStochastic(NULL,0,Dperiod,Kperiod,Slowing,MODE_SMA,0,st_type,st_bars); if (st_result > -1) return(st_result); } else return(-1); return(0); } int Criterion() // 10 - open buy, 11 - close buy, 20 - open sell, 21 - close sell. { int St_M, St_S; St_M = Stoch(); St_S = Stoch(0,1); if (St_M >= St_buy && Stoch(1,0) < (St_buy-1)) return(10); return(0); } int start() { if (Criterion() == 10 && AccountFreeMargin() > Lots*5000){ //======================================= // if (GetOrdersCount(16384, OP_SELL) > 0)CloseSell(); if(GetOrdersCount(16384, OP_BUY) < MaxOrders || MaxOrders == 0) ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, Bid - SL * Point, Ask + TP * Point, "My order #", 16384, 0, Green); } return(0); } //============================================================== // подсчет кол-ва открытых позиций int GetOrdersCount(int MagicNumber, int Type){ int count = 0; for(int i = 0; i < OrdersTotal(); i++) { if(OrderSelect(i, SELECT_BY_POS) == false) continue; //if(OrderSymbol() != Symbol()) continue; if(OrderMagicNumber() != MagicNumber) continue; if(OrderType() == Type) count++; } return (count); }
После //======================
смотри.
После //======================
смотри.
как то все странно написано. Всегда умиляет код когда каждую мелочь которая состоит из одной функции отделяют в отдельную функцию
пересечение стохастика линии смотрят так:
StochNow=iStochastic(NULL,0,Dperiod,Kperiod,0,MODE_SMA,0,0,Indicator_Shift); StochLast=iStochastic(NULL,0,Dperiod,Kperiod,0,MODE_SMA,0,0,Indicator_Shift+1); if (StochNow>30 && StochLast<=30) //buy if (StochNow<80 && StochLast>=80) //sell
Также в советнике с симметричными уровнями не советую делать 2 параметра уровней. Т.е. если оптимизация покажет уровни 10 и 75 это будет не корректно- подгон к тренду.
Ставишь в опциях один параметр который отвечает за расстояние до уровней от центра (от 50 для стохастика) и в init рассчитываешь эти уровни на которые будешь ориентироваться.
А что нибудь более действенное? Говорю же, должны определяться только 6 сигналов за промежуток времени, а терминал на каждый сигнал выдает целый ворох ордеров.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Народ, требуется ваша помощь.
Есть торговые условия вида, определены так: Покупать если %D линия стохастика пересекает отметку 30, при этом предыдущий бар должен быть ниже значения 29(получается отметка пересекается снизу вверх). В тестере я задал небольшой временной интервал на часовом тайм фрейме, чтобы посчитать количество сигналов вручную и сравнить с показаниями советника. Дожно получиться 6 сигналов, но советник просто выдает стену текста с сигналами на бай, а в идеале должно быть только 6.
Вот код советника, может кто подскажет что я делаю не правильно?