Как можно для Amibroker прописать скользящий механический стоп?
Для MetaStock найдено следующее:
Скользящие стопы для механических торговых систем MetaStock:
Пример скользящего стопа для длинных позиций, который добавляется к уже разработанным условиям открытия и закрытия позиций:
Как правильно поставить стоп-лосс
стоп-лосс для длинных позиций:
стоп-лосс для коротких позиций:
В Amibroker как это можно реализовать?
Для MetaStock найдено следующее:
Скользящие стопы для механических торговых систем MetaStock:
Пример скользящего стопа для длинных позиций, который добавляется к уже разработанным условиям открытия и закрытия позиций:
Код:
Step := 0.02 ;
Maxm := 0.2 ;
Enter.signal := {условия открытия позиции торговой системой} ;
Close.signal := {условия закрытия позиции торговой системой} ;
Start := BarsSince( Enter.signal) < BarsSince( Close.signal) AND Ref( BarsSince( Enter.signal), -1) > Ref( BarsSince( Close.signal), -1) ; {определяет первый бар открытой позиции}
Enter.Point := ValueWhen( 1, Start, Сlose)) ; {определяет цену закрытия первого бара открытой позции}
SIP := Enter. Point - 3 * ATR( 5) ; {точка начального размещения скользящего стопа удалена от цены закрытия первого бара на утроенный средний торговый диапазон последних пяти баров}
HighestSince.Enter := HighestSince( 1, Start, Close) ; {определяет последний наибольший максимум достигнутый ценой в ходе данного трейда}
cum.para.sar := Cum( If( HighestSince.Enter <> Ref( HighestSince.Enter, -1), step, 0)) ; {если достигнут новый максимум, добавляется значение шага}
AF.st := step + (cum.para.sar - ValueWhen( 1, Start, cum.para.sar)) ; {вычисляется значение фактора акселерации}
AF := If( AF.st > maxm,maxm, AF.st) ; {проверяется не превысил ли фактор акселерации допустимого максимального значения, если превысил - то приравнивается к максимально допустимому значению}
ParaSAR.1 := If( Start, SIP, PREV + AF * ( HighestSince.Enter - PREV)) ; {вычисляется значение скользящего стопа}
ParaSAR.1
стоп-лосс для длинных позиций:
Код:
Enter.trade := условия открытия длинных позиций ;
Close.trade := условия закрытия длинных позиций ;
Position := HighestBars( Close.trade) >= HighestBars( Enter.trade) ;
Open.Price := ValueWhen( 1, Position = 1 and ref( Position, -1) = 0, Close) ;
Full.Price := Open.Price * ( 100 + значение комиссии в %) / 100 ;
Close< Full.Price * (( 100 - opt1) / 100)
Код:
Enter.trade := условия открытия коротких позиций ;
Close.trade := условия закрытия коротких позиций ;
Position := HighestBars( Close.trade) >= HighestBars( Enter.trade) ;
Open.Price := ValueWhen( 1, Position = 1 and ref( Position, -1) = 0, Close) ;
Full.Price := Open.Price * ( 100 - значение комиссии в %) / 100 ;
Close> Full.Price * (( 100 - opt1) / 100)