서로 독립적으로 두 위치를 관리하는 이익 트롤의 조언이 필요합니다. 어떻게 구현할 수 있습니까? - 페이지 4

 
charony :

2sell에서 후행은 SL을 850에 놓아야 합니다.

그러나 그는 950 수준에서 마감했습니다. 이것은 수동 거래의 경우가 아닙니다.

이것은 코드에서 어떻게 할 수 있습니까?

갑자기 왜? 가격이 899에 도달한 경우. 흔적은 50포인트 떨어져 있어야 하므로 약 950 어딘가에 있어야 합니다.
 
sanyooooook :
갑자기 왜? 가격이 899에 도달한 경우. 흔적은 50포인트 떨어져 있어야 하므로 약 950 어딘가에 있어야 합니다.

그는 1sell에서 SL로 닫았습니다.
 
기다려 봅시다. 아마도 아는 사람이 따라잡을 것입니다.
 
아무도 몰라
 
charony :
아무도 몰라


가격 이 포즈의 시작 가격 (예: 100)에서 최소 X 포인트만큼 올바른 방향으로 움직일 때만 포즈가 켜지도록 하는 흔적이 필요합니까? 그렇다면 트롤 기능에 추가로 한 줄의 코드입니다.

시작 가격에서 X 포인트가 전달될 때 추적이 트리거되는 또 다른 옵션이 있습니다. 100p 통과 - 추적 -50p, 또 다른 100p 통과 - 다시 -50 등.

 
Avals :


가격이 포즈의 시작 가격(예: 100)에서 최소 X 포인트만큼 올바른 방향으로 움직일 때만 포즈가 켜지도록 하는 흔적이 필요합니까? 그렇다면 트롤 기능에 추가로 한 줄의 코드입니다.

시작 가격에서 X 포인트가 전달될 때 추적이 트리거되는 또 다른 옵션이 있습니다. 100p 통과 - 추적 -50p, 또 다른 100p 통과 - 다시 -50 등.


나는 그것을 가지고 있습니다. 즉, 트롤은 특정 이벤트에서 켜집니다.

하나의 위치가 열려 있으면 문제가 없습니다.

2개 이상의 위치를 열 때 트레일러는 하나의 SL만 배치하고,

SL 레벨의 위치에 도달하면

이 유형의 모든 위치가 닫힙니다.

나는 같은 유형의 위치를 이끌 흔적이 필요합니다

서로 독립적으로

 
charony :


나는 그것을 가지고 있습니다. 즉, 트롤은 특정 이벤트에서 켜집니다.

하나의 위치가 열려 있으면 문제가 없습니다.

2개 이상의 위치를 열 때 트레일러는 하나의 SL만 배치하고,

SL 레벨의 위치에 도달하면

이 유형의 모든 위치가 닫힙니다.


당신의 손절매는 마지막 가격에서 TralingStop 포인트의 모든 위치에 대해 동일하게 설정되고 오픈 위치 쪽으로만 이동합니다. 저것들. 모든 포즈에 대해 매수 후행은 보유 시간 의 최대값에서 설정되며 물론 모두 동시에 닫힙니다. 최대값은 합계가 됩니다. "서로 독립적으로 동일한 유형의 위치"가 닫히도록 필요한 알고리즘을 파악하십시오. 많은 옵션이 있습니다.
 

설정에서 SL은 설정되지 않습니다. 즉 = 0, TP도 = 0,

트롤=모든 위치 및 모든 유형에 대해 50점

트롤은 서로 독립적으로 위치를 탐색해야 합니다.

1000=pos1Buy에서 가격은 pos1Buy에 대해 1050 후행 SL에서 북쪽으로 이동했습니다.

가격은 더 북쪽으로 이동하여 1090에 도달했으며 pos1Buy의 SL은 1050에 머물렀고 pos2Buy의 SL은 그렇지 않았습니다.

가격이 남쪽으로 이동하여 1050에 도달했으며 두 위치가 모두 마감되었습니다.

pos1만 닫으려면 SL이 필요합니다.

가격이 1140에 도달하면 pos2는 SL 로 마감되어야 합니다 .

, 위치 2의 SL은 1130으로 설정되고 1140부터 가격은 1130 아래로 떨어집니다.

pos2에 대해 SL을 작동해야 합니다 .

pos2Buy------------------------------------------------- --------------- ------------------------1080

SL------------------------------------- --------------------------------1050

pos1구매------------------------------------------------- --------------- ------------------------1000

 

다음은 마법을 매개변수로 받아들이는 트롤입니다. 마법으로 주문을 열 때 Time[0]이나 다른 것, 날짜 시간 등을 취할 수 있습니다.

수락:

level_ts - 포인트의 후행 중지

level_step - 트롤 단계

mn - Magic, -1이면 모든 명령을 트롤합니다.


 //+----------------------------------------------------------------------------+
//| TrailingStop.                                                              |
//|   траллит все ордера, на уровень выставленный во входных параметрах.       |
//+----------------------------------------------------------------------------+
void TrailingStop( int level_ts, int level_step = 5 , int mn = - 1 ) 
{
   int ot, err, quantity_orders, cx;
   bool fm;
   double op, as, bd, pt, sl, tp, ut;
//----
   quantity_orders = OrdersTotal ();
   if (quantity_orders >= 0 ) {
       for (cx = 0 ; cx < quantity_orders; cx++) {
         if (! OrderSelect (cx, SELECT_BY_POS, MODE_TRADES)) {
             Print ( "Error: SimpleTrailing(), OrderSelect: " + cx + ". Ошибка: " + GetLastError ());
         }
         if (mn < 0 || OrderMagicNumber ()==mn) {   
            pt = MarketInfo ( OrderSymbol (), MODE_POINT);
            bd = MarketInfo ( OrderSymbol (), MODE_BID);
            as = MarketInfo ( OrderSymbol (), MODE_ASK);
            op = OrderOpenPrice ();
            ot = OrderType ();
            sl = OrderStopLoss ();
            tp = OrderTakeProfit ();
            ut = level_ts + level_step;
         
             if (ot == OP_BUY) {
               if (sl == 0 || sl < op) {                               // если стопа нет или стоп ниже цены открытия
                   if (op <  (bd - ut * pt)) {                         // если цена открытия ниже чем текущая цена минус ( стоп - шаг стопа)
                     sl = bd - level_ts * pt;
                  }
               }
               else {
                   if (sl < (bd - ut * pt) && bd > (op + ut * pt)) {
                     sl = bd - level_ts * pt;
                  }
               }
            }
             if (ot == OP_SELL) {
               if (sl == 0 || sl > op) {
                   if (op > (as + ut * pt)) {
                     sl = as + level_ts * pt;
                  }
               }
               else {
                   if (sl > (as + ut * pt) && as < (op - ut * pt)) {
                     sl = as + level_ts * pt;
                  }
               }
            }
             if (sl != OrderStopLoss ()) {
               op = NormalizeDouble (op, Digits );
               tp = NormalizeDouble (tp, Digits );
               sl = NormalizeDouble (sl, Digits );
               fm = OrderModify ( OrderTicket (), op, sl, tp, 0 , CLR_NONE );
               if (fm) {
                   if (UseSound) PlaySound (NameFileSound);
               }
               else {
                  err= GetLastError ();
                   Print ( "Error(" ,err, ") SimpleTrailing(): " ,ErrorDescription(err));
               }
            }
         }
      }
   }
}
 
charony :

설정에서 SL은 설정되지 않습니다. 즉 = 0, TP도 = 0,

트롤=모든 위치 및 모든 유형에 대해 50점

트롤은 서로 독립적으로 위치를 탐색해야 합니다.

1000=pos1Buy에서 가격은 pos1Buy에 대해 1050 후행 SL에서 북쪽으로 이동했습니다.

가격은 더 북쪽으로 이동하여 1090에 도달했으며 pos1Buy의 SL은 1050에 머물렀고 pos2Buy의 SL은 그렇지 않았습니다.

가격이 남쪽으로 이동하여 1050에 도달했으며 두 위치가 모두 마감되었습니다.

pos1만 닫으려면 SL이 필요합니다.

가격이 1140에 도달하면 pos2는 SL 로 마감되어야 합니다 .

, 위치 2의 SL은 1130으로 설정되고 1140부터 가격은 1130 아래로 떨어집니다.

pos2에 대해 SL을 작동해야 합니다 .

pos2Buy------------------------------------------------- --------------- ------------------------1080

SL------------------------------------- --------------------------------1050

pos1구매------------------------------------------------- --------------- ------------------------1000


내가 올바르게 이해했다면 교체해야합니다.

  if (NormalizeDouble(SL,Digits)<// Если ниже желаемого..
               NormalizeDouble(Bid-TS,Digits))

  if (NormalizeDouble(SL,Digits)<// Если ниже желаемого..
               NormalizeDouble(Bid-TS,Digits) && (Bid>=Price+TS))
세포와 유사합니다.