Открытие сделки по пересечению скользящих

 
Добрый день. Подскажите пожалуйста можно ли сделать так чтобы сигналом к покупке или продаже по пересечению скользящих ,выступал не новый бар,а собственно само пересечение? Линия пересекла линию , произошла сделка.
 

сами линии не строятся))) они строятся на основании цены (баров)

Сигнал может быть по факту закрытия свечи, но может быть и по сигналу текущей свечи

 
можно, но сразу предупреждаю  - как только кончится движение будет много убыточных сделок подряд
 
Vladimir Mametov:

сами линии не строятся))) они строятся на основании цены (баров)

Сигнал может быть по факту закрытия свечи, но может быть и по сигналу текущей свечи

Можно ли совместить момент пересечения и текущий сигнал свечи?
 
Mickey Moose:
можно, но сразу предупреждаю  - как только кончится движение будет много убыточных сделок подряд
Почему?
 

А какие проблемы, вот, вызывай на каждом тике, отгрыз из моего старого советника. Советую еще ADX прикрутить, меньше убыточных сделок будет. Одного пересечения недостаточно.


enum CrossType {CrossNone, CrossDownUp, CrossUpDown};
struct Trigger
{
    CrossType   direction; // устанавливается при нахождении пересечения, если в дальнейшем есть подтверждение от ADX, открывается ордер
    uint        crossNumber;
    datetime    crossTime;
    bool        newCrossEnabled;
} crossTrigger;

CrossType CheckForIntersection()
{
    if(!crossTrigger.newCrossEnabled)
        return CrossNone;
    double currentMAfast = iMA(NULL, TimeFrame, FastMAPeriod, 0, FastMAMethod, FastMAAppPrice, 0);
    double currentMAslow = iMA(NULL, TimeFrame, SlowMAPeriod, 0, SlowMAMethod, SlowMAAppPrice, 0);
    double oldMAfast = iMA(NULL, TimeFrame, FastMAPeriod, 0, FastMAMethod, FastMAAppPrice, BarShift);
    double oldMAslow = iMA(NULL, TimeFrame, SlowMAPeriod, 0, SlowMAMethod, SlowMAAppPrice, BarShift);
    
    if(currentMAfast>currentMAslow && oldMAfast<oldMAslow)// || (currentMAfast>currentMAslow && oldMAfast==oldMAslow))
    {
        crossTrigger.direction = CrossDownUp;
        crossTrigger.crossTime = TimeCurrent();
        WriteMsg("CrossDownUp, crossNumber=" + IntegerToString(crossTrigger.crossNumber++));
        CLoseAllOrders();    
    }    
        
    if(currentMAfast<currentMAslow && oldMAfast>oldMAslow)// || (currentMAfast<currentMAslow && oldMAfast==oldMAslow))
    {
        crossTrigger.direction = CrossUpDown;
        crossTrigger.crossTime = TimeCurrent();
        WriteMsg("CrossUpDown, crossNumber=" + IntegerToString(crossTrigger.crossNumber++));
        CLoseAllOrders();    
    }    
    
    
    if(TimeCurrent() - crossTrigger.crossTime > MaxTimeForCrossLive && crossTrigger.direction != CrossNone) // время жизни пересечения истекло
    {
        crossTrigger.direction = CrossNone;
        crossTrigger.crossTime = D'01.01.2024';
        WriteMsg("время жизни пересечения " + IntegerToString(crossTrigger.crossNumber) + " истекло");
    }

    return crossTrigger.direction;
}

***