Нужен пример трала для мт5

 

добрый день.

Нужен пример простого трала для мт5

с шагом  и размером стопа

 
double gd_Stop_Level = SymbolInfoInteger(_Symbol, SYMBOL_TRADE_STOPS_LEVEL) / pow(10, _Digits);

void Trailing_Stop(double d_Trail_Trigger, double d_Trail_Step, double d_Trail_Distance) {
        if(!PositionSelect(_Symbol)) return;
        double
                d_Min_Acceptable_Distance = fmax(gd_Stop_Level, SymbolInfoDouble(_Symbol, SYMBOL_ASK) - SymbolInfoDouble(_Symbol, SYMBOL_BID)),
                d_New_SL = PositionGetDouble(POSITION_PRICE_CURRENT)
        ;
        if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY) {
                if(d_New_SL - PositionGetDouble(POSITION_PRICE_OPEN) < d_Trail_Trigger) return;
                if(d_New_SL - PositionGetDouble(POSITION_SL) < d_Trail_Distance + d_Trail_Step) return;
                d_New_SL -= d_Trail_Distance;
        } else if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL) {
                if(PositionGetDouble(POSITION_PRICE_OPEN) - d_New_SL < d_Trail_Trigger) return;
                if(PositionGetDouble(POSITION_SL) > 0.0) if(PositionGetDouble(POSITION_SL) - d_New_SL < d_Trail_Distance + d_Trail_Step) return;
                d_New_SL += d_Trail_Distance;
        } else return;
        if(NormalizeDouble(d_New_SL, _Digits) == NormalizeDouble(PositionGetDouble(POSITION_SL), _Digits)) return;
        if(!Is_Acceptable_Distance(d_New_SL, PositionGetDouble(POSITION_PRICE_CURRENT))) return;
        
        CTrade Trade;
        Trade.LogLevel(LOG_LEVEL_ERRORS);
        Trade.PositionModify(_Symbol, d_New_SL, PositionGetDouble(POSITION_TP));
        
        return;
}
.
 
Alexander Puzanov:
.

спасибо,

расскажите что означают переменные

double d_Trail_Trigger, double d_Trail_Step, double d_Trail_Distance
 
что означают переменные

Буквально то что написано d_Trail_Trigger - триггер, т.е. уровень начала работы трала, d_Trail_Distance - расстояние меж ценой и SL, то что вы назвали 'размером стопа', d_Trail_Step - шаг

Все эти переменные переведены из пунктов/пипсов в цены инструмента ещё в блоке OnInit как и gd_Stop_Level. Делать это в функции не стоит - нет необходимости повторять одну и ту же операцию с одинаковым результатом десятки/сотни тысяч раз по ходу работы бота

 

мне параметр триггер не особо понятен был,

и ещё хочу уточнить -

это можно указать с какого момента начинать траллить: в плюсе какое то количество пипсов или ,вновь ваш пост перечитал, цена после преодоления которой трал начнёт работать ?

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