Нужна помощь! - страница 2

 
Спасибо за помощь! Но он делает какой-то левый тест. Открываются только лонги и в огромных количествах. Может, я неправильно описал пересечение стохастиком сигнальных линий?
 

Например можно проверять на наличие открытых ордеров, и если есть хоть один открытый ордер, то больше не открывать. И тогда у тебя будет только один открытый ордер.

Калькулятор ордеров есть в стандартном советнике: Moving Average

//+------------------------------------------------------------------+
//| Calculate open positions                                         |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
  {
   int buys=0,sells=0;
//----
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
        {
         if(OrderType()==OP_BUY)  buys++;
         if(OrderType()==OP_SELL) sells++;
        }
     }
//---- return orders volume
   if(buys>0) return(buys);
   else       return(-sells);
  }
 
А чем отличается тест на тиках и тест на ценах открытия сформировавшихся баров? На ценах открытия тестирует нормально
 
Ну потому что когда ты тестишь на барах, то он каждый бар проверяет один раз, например проверил бар там дал сигнал на покупку, и перешел к следующему, на сдел. уже нет сигнала, и т.д. А если ты тестишь на тике, он тикнул на 1 пипс, проверил условие, ему говорят, что стох показывает покупать, он не долго думает - покупает. Дальше еще один тик на том же баре, ему опять стох говорит покупать, он опять покупает, и так покупает пока не оттикает весь текущий бар, и не переключится на следуйщий. Откроет столько позиций сколько тикнет на этом баре. По этому нужно вести контроль кол-ва сделок.
 
так мне надо чтобы он после закрытия бара сделки открывал
 
Ну тогда тебе нужно условие открытия нового бара. Если новый бар открылся, то производишь расчет по закрытию прошлого бара. Так он будет производить расчет сигнала, только один раз за бар.
 
а как это записать в коде?
 
bool IsNewBar(){
    static datetime tmp=0;
    if(tmp!=Time[0]){
        tmp=Time[0];
        return(true);
    }
    else
        return(false);
}
 
Всё равно не пашет. Можешь посмотреть? Заранее благодарен
Файлы:
 
ilushkin писал(а) >>
Всё равно не пашет. Можешь посмотреть? Заранее благодарен

А вроде нормально работает. Видимо в твоем случае цена за 25 минут до ордера не успевает дойти.

Причина обращения: