이 유형의 후행은 표준을 수정한 것입니다. 내가 틀리지 않았다면, 한 번에 KimIV 가 비슷한 것을 작성했습니다 (하지만 "더 친절"하기 때문에 ... :) 손절매가 "포인트"로 전송되지 않는다는 점에서 표준 후행과 다릅니다. 예를 들어, +31에서 30포인트의 거리에서 후행할 때 정지 손실은 +1만큼, +32에서 - +2 등으로 이동하지만 지정된 길이의 "단계"만큼 이동합니다(예: 후행할 때 40 포인트의 거리와 10의 "단계"에서 +40에 도달하면 손절매가 +10으로 이동하고 이익이 +50(40p. + 단계)에 도달할 때까지 아무 것도 변경되지 않습니다(따라서 우리는 실제로이 알고리즘의 본질 인 특정 자유에 가격을 매기고 +10에서 + 50 정지 손실에서만 +10에서 +20으로, +60에서 +30 포인트로 이동합니다. , 등.
옵션: 티켓 - 고유 주문 번호( OrderSelect() 를 사용하여 함수를 호출하기 전에 선택됨); trldistance - 우리가 "추적"하는 현재 속도(포인트)로부터의 거리(MarketInfo(Symbol(),MODE_STOPLEVEL) 이상); trlstep - 손실 변경 "단계"(포인트)를 중지합니다 (1 이상).
trlstep = 1일 때 이 기능은 표준 후행과 다르지 않습니다. 이 알고리즘의 주요 "기능"은 환율에 "이동의 자유"를 제공하는 것입니다. 가격이 "방황하고 결정한" 후에만 손절매가 강화됩니다. V. Barishpolts가 이미 언급한 "슬라이딩 채널" 전술의 규칙에 대한 설명에서 이 후행 알고리즘 을 처음 만났습니다.
//+------------------------------------------------------------------+//| ТРЕЙЛИНГ СТАНДАРТНЫЙ-СТУПЕНЧАСТЫЙ |//| Функции передаётся тикет позиции, расстояние от курса открытия, |//| на котором трейлинг запускается (пунктов) и "шаг", с которым он |//| переносится (пунктов) |//| Пример: при +30 стоп на +10, при +40 - стоп на +20 и т.д. |//+------------------------------------------------------------------+void TrailingStairs( int ticket, int trldistance, int trlstep)
{
double nextstair; // ближайшее значение курса, при котором будем менять стоплосс// проверяем переданные значенияif ((trldistance<MarketInfo( Symbol (),MODE_STOPLEVEL)) || (trlstep< 1 ) || (trldistance<trlstep) || (ticket== 0 ) || (! OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES)))
{
Print ( "Трейлинг функцией TrailingStairs() невозможен из-за некорректности значений переданных ей аргументов." );
return ( 0 );
}
// если длинная позиция (OP_BUY)if (OrderType()==OP_BUY)
{
// расчитываем, при каком значении курса следует скорректировать стоплосс// если стоплосс ниже открытия или равен 0 (не выставлен), то ближайший уровень = курс открытия + trldistance + спрэдif ((OrderStopLoss()== 0 ) || (OrderStopLoss()<OrderOpenPrice()))
nextstair = OrderOpenPrice() + trldistance* Point ;
// иначе ближайший уровень = текущий стоплосс + trldistance + trlstep + спрэдelse
nextstair = OrderStopLoss() + trldistance* Point ;
// если текущий курс (Bid) >= nextstair и новый стоплосс точно лучше текущего, корректируем последнийif (Bid>=nextstair)
{
if ((OrderStopLoss()== 0 ) || (OrderStopLoss()<OrderOpenPrice()) && (OrderOpenPrice() + trlstep* Point <Bid-MarketInfo( Symbol (),MODE_STOPLEVEL)* Point ))
{
if (!OrderModify(ticket,OrderOpenPrice(),OrderOpenPrice() + trlstep* Point ,OrderTakeProfit(),OrderExpiration()))
Print ( "Не удалось модифицировать стоплосс ордера №" ,OrderTicket(), ". Ошибка: " , GetLastError ());
}
}
else
{
if (!OrderModify(ticket,OrderOpenPrice(),OrderStopLoss() + trlstep* Point ,OrderTakeProfit(),OrderExpiration()))
Print ( "Не удалось модифицировать стоплосс ордера №" ,OrderTicket(), ". Ошибка: " , GetLastError ());
}
}
// если короткая позиция (OP_SELL)if (OrderType()==OP_SELL)
{
// расчитываем, при каком значении курса следует скорректировать стоплосс// если стоплосс ниже открытия или равен 0 (не выставлен), то ближайший уровень = курс открытия + trldistance + спрэдif ((OrderStopLoss()== 0 ) || (OrderStopLoss()>OrderOpenPrice()))
nextstair = OrderOpenPrice() - (trldistance + MarketInfo( Symbol (),MODE_SPREAD))* Point ;
// иначе ближайший уровень = текущий стоплосс + trldistance + trlstep + спрэдelse
nextstair = OrderStopLoss() - (trldistance + MarketInfo( Symbol (),MODE_SPREAD))* Point ;
// если текущий курс (Аск) >= nextstair и новый стоплосс точно лучше текущего, корректируем последнийif (Ask<=nextstair)
{
if ((OrderStopLoss()== 0 ) || (OrderStopLoss()>OrderOpenPrice()) && (OrderOpenPrice() - (trlstep + MarketInfo( Symbol (),MODE_SPREAD))* Point >Ask+MarketInfo( Symbol (),MODE_STOPLEVEL)* Point ))
{
if (!OrderModify(ticket,OrderOpenPrice(),OrderOpenPrice() - (trlstep + MarketInfo( Symbol (),MODE_SPREAD))* Point ,OrderTakeProfit(),OrderExpiration()))
Print ( "Не удалось модифицировать стоплосс ордера №" ,OrderTicket(), ". Ошибка: " , GetLastError ());
}
}
else
{
if (!OrderModify(ticket,OrderOpenPrice(),OrderStopLoss()- (trlstep + MarketInfo( Symbol (),MODE_SPREAD))* Point ,OrderTakeProfit(),OrderExpiration()))
Print ( "Не удалось модифицировать стоплосс ордера №" ,OrderTicket(), ". Ошибка: " , GetLastError ());
}
}
}
대신 붙여 넣을 전체 코드는 다음과 같습니다.
//+------------------------------------------------------------------+void TrailingStairs( int ticket, int trldistance)
{
int Spred=Ask - Bid;
if (OrderType()==OP_BUY)
{
if ((Bid-OrderOpenPrice())>( Point *trldistance))
{
if (OrderStopLoss()<Bid- Point *trldistance || (OrderStopLoss()== 0 ))
{
OrderModify(ticket,OrderOpenPrice(),Bid- Point *trldistance,OrderTakeProfit(), 0 ,Green);
if (PolLots)
if ( NormalizeDouble (OrderLots()/ 2 , 2 )>MarketInfo( Symbol (), MODE_MINLOT))
{
OrderClose(ticket, NormalizeDouble (OrderLots()/ 2 , 2 ),Ask, 3 ,Green);
}
else
{
OrderClose(ticket,OrderLots(),Ask, 3 ,Green);
}
}
}
}
else
{
if ((OrderOpenPrice()-Ask)>( Point *trldistance))
{
if ((OrderStopLoss()>(Ask+ Point *trldistance)) || (OrderStopLoss()== 0 ))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+ Point *trldistance,OrderTakeProfit(), 0 ,Red);
if (PolLots)
if ( NormalizeDouble (OrderLots()/ 2 , 2 )>MarketInfo( Symbol (), MODE_MINLOT))
{
OrderClose(ticket, NormalizeDouble (OrderLots()/ 2 , 2 ),Bid, 3 ,Green);
}
else
{
OrderClose(ticket,OrderLots(),Bid, 3 ,Green);
}
}
}
}
}
3. 후행 표준 - '계단'.
이 유형의 후행은 표준을 수정한 것입니다. 내가 틀리지 않았다면, 한 번에 KimIV 가 비슷한 것을 작성했습니다 (하지만 "더 친절"하기 때문에 ... :) 손절매가 "포인트"로 전송되지 않는다는 점에서 표준 후행과 다릅니다. 예를 들어, +31에서 30포인트의 거리에서 후행할 때 정지 손실은 +1만큼, +32에서 - +2 등으로 이동하지만 지정된 길이의 "단계"만큼 이동합니다(예: 후행할 때 40 포인트의 거리와 10의 "단계"에서 +40에 도달하면 손절매가 +10으로 이동하고 이익이 +50(40p. + 단계)에 도달할 때까지 아무 것도 변경되지 않습니다(따라서 우리는 실제로이 알고리즘의 본질 인 특정 자유에 가격을 매기고 +10에서 + 50 정지 손실에서만 +10에서 +20으로, +60에서 +30 포인트로 이동합니다. , 등.
옵션:
티켓 - 고유 주문 번호( OrderSelect() 를 사용하여 함수를 호출하기 전에 선택됨);
trldistance - 우리가 "추적"하는 현재 속도(포인트)로부터의 거리(MarketInfo(Symbol(),MODE_STOPLEVEL) 이상);
trlstep - 손실 변경 "단계"(포인트)를 중지합니다 (1 이상).
trlstep = 1일 때 이 기능은 표준 후행과 다르지 않습니다. 이 알고리즘의 주요 "기능"은 환율에 "이동의 자유"를 제공하는 것입니다. 가격이 "방황하고 결정한" 후에만 손절매가 강화됩니다. V. Barishpolts가 이미 언급한 "슬라이딩 채널" 전술의 규칙에 대한 설명에서 이 후행 알고리즘 을 처음 만났습니다.
==================
이것은 고문에서 흥미 롭습니다.
대신 붙여 넣을 전체 코드는 다음과 같습니다.
이것
원하는 어드바이저 수정을 시작하고 자신의 어드바이저에 삽입하지 않는 것이 좋습니다. 결과는 거의 같지만 문제는 더 적습니다.
또한 ALIEN 코드를 읽고 이해하는 능력은 매우 유용합니다 ...
원하는 어드바이저 수정을 시작하고 자신의 어드바이저에 삽입하지 않는 것이 좋습니다. 결과는 거의 같지만 문제는 더 적습니다.
또한 ALIEN 코드를 읽고 이해하는 능력은 매우 유용합니다 ...
그가 갖고 싶어도 가질 수 없는 동안!
))) 모두가 이것으로 시작합니다 ... 그리고 나서-숲으로 더 멀리 갈수록 더 두꺼운 당파 ...
어드바이저에 코드 작성법을 찻주전자에 알려주세요,
특정 기간(예: 10.45 - 11.15) 동안 고가와 저가를 형성하는 것은 무엇입니까?
그래서 이 시간에 어드바이저를 켰다.즉, 나는 9시에 단말기를 켠다 -> 시간이 10시 45분에 그가 켜고 추적을 시작한다.이 라인에서 멀지 않은 낮고 대기중인 주문.
답변에 미리 감사드립니다.
트렐링이 어떻게 연결되어 있는지 이해가 되지 않습니다.
결국, 실제로 작동해야합니다.
트렐링이 어떻게 연결되어 있는지 이해가 되지 않습니다.
결국, 실제로 작동해야합니다.
"그냥 일하세요" 아무도, 아무것도 하지 않을 것입니다.
이 특정 흔적이 무엇을 찾고 있는지, 어떤 조건에서, 어떤 단계로, 어떤 추가 조건이 있는지 분석해야 합니다.
트롤 코드를 분해하면 모든 것이 명확해 지지만 "눈이 뻑뻑하다"는 원칙은 좋은 결과로 이어지지 않습니다....