2つのポジションを独立して制御するトロールプロからアドバイスが欲しいのですが、どのように実装すればよいでしょうか? - ページ 4

 
charony:

2sellでは、トロールはSLを850にするはずだった。

マニュアルトレードではなく、950で寄り付きました。

コード上ではどのように解決できるのでしょうか?

なぜ、そんなことをするのでしょうか?もし価格が899にしか到達していなければ、トロールは50ピップス先にあるはずですから、950あたりのどこかにあるはずです。
 
sanyooooook:
なぜ、そんなことをするのだろう?価格が899にしか到達していない場合、トロールは50ピップス先にあり、したがって950付近のどこかにあるはずです。

1sellからSLでクローズした。
 
知っている人が出てくるのを待とう。
 
誰も知らない
 
charony:
知らない人はいない


あなたはおそらく、価格がポジションのオープン価格から 少なくともXピップス(例えば100)右側に移動したときにのみ、ポジションのためのトラールが有効になるようにしたいですか?もしそうなら、それはtrall関数に追加された1行のコードです。

100ポイント行ったら-50ポイント、さらに100ポイント行ったら-50ポイントで再びトラール、といった具合に、建値からXポイント経過した時点でトラールを発動させる方法もあります。

 
Avals:


例えば、ポジションのオープン価格から少なくともXポイント(例えば100)だけ価格が必要な方向に動いたときにのみ、ポジションのトロールを有効にする必要があるのではないでしょうか?もしそうなら、それはtrall関数に追加された1行のコードです。

また、始値からXポイント経過するとトロールが発動するというバリエーションもあり、100p通過でトロール-50p、さらに100p通過で再びトロール-50p、などです。


私は、特定のイベントでトロールがオンになるように設定しています。

片方のポジションが開いても問題ありません。

2つ以上のポジションを開いている場合、trawlは1つのSLだけを表示します。

いずれかのポジションがSLに到達すれば

このタイプのポジションはすべてクローズされます。

トレーラーは1種類のポジションを保持する必要がある

単独で

 
charony:


私はそのようにしています。つまり、特定のイベントでトロールのスイッチが入ります。

ポジションが1つでも空いていれば問題ありません。

2つ以上のポジションをオープンした場合、トロールは1つのSLを設定するだけです。

いずれかのポジションがSLに到達したとき

このタイプのポジションはすべてクローズされます。


ストップロスはすべてのポジションで最終価格からTralingStop ポイントに同じように設定され、オープンポジションの 方向にのみ動きます。つまり、すべてのポジションについて、買いトレールは保有期間の 最大値から 設定され、もちろん最大値は共通となるため、すべて同時にクローズされます。同じ種類のポジションを互いに独立して閉じる」アルゴリズムとは何か、必要なものを考えてみてください。バリエーションが多いですね。
 

SLが設定されていない(=0)場合、TPも=0となります。

すべてのポジション、すべてのタイプでTrawl=50pips。

トレーリングは互いに独立したポジションをリードすること

1000=pos1Buy で価格は1050で北上 トロールはpos1BuyのSLを置く。

価格はさらに北上し、1090に到達、pos1BuyのSLは1050のまま、pos2BuyのSLはなし。

価格は南下し、1050まで行き、両方のポジションがクローズされました。

SLでpos1だけクローズしたい

pos2は 価格が1140に達したら、SLで クローズ する必要があります。

すなわち、1130で pos2のSLがあり、1140から1130を下 回る。

pos2のSLが発動するはず です。

поз2Buy--------------------------------------------------------------------------1080

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

поз1Buy--------------------------------------------------------------------------1000

 

注文を開くときに、Time[0]または何か他のもの、日付、時間などに設定することができます)。

を取ります。

level_ts - トレーリングストップ,ポイント単位.

level_step - 末尾のステップ.

mn - Magik, もし -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となります。

すべてのポジション、すべてのタイプでTrawl=50pips。

トレーリングは互いに独立したポジションをリードすること

1000=pos1Buy で価格は1050で北上 トロールはpos1BuyのSLを置く。

価格はさらに北上し、1090に到達、pos1BuyのSLは1050のまま、pos2BuyのSLはなし。

価格は南下し、1050まで行き、両方のポジションがクローズされました。

SLでpos1だけクローズしたい

pos2は 価格が1140に達したら、SLで クローズ する必要があります。

すなわち、1130で pos2のSLがあり、1140から1130を下 回る。

pos2のSLが発動するはず です。

поз2Buy--------------------------------------------------------------------------1080

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

поз1Buy--------------------------------------------------------------------------1000


を交換する必要があります。

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

  if (NormalizeDouble(SL,Digits)<// Если ниже желаемого..
               NormalizeDouble(Bid-TS,Digits) && (Bid>=Price+TS))
売りも同じです。