- if(OrderType() == OP_BUY)
- {
- dSl=OrderStopLoss();
- if( dSl == 0 )
- if( dInitialSL != 0)
- dSl = dnAsk - dInitialSL;
- ArrayResize(arrSL,5);
- ArrayInitialize(arrSL,dSl);
- LogSL("OP_BUY-check",dSl,arrSL[0],arrSL[1],arrSL[2],arrSL[3]);
- if( dPropSLRatio > 0 )
- {
- if( Bid >= (OrderOpenPrice() + dPropSLThreshold) )
- {
- dSl = NormalizeDouble( OrderOpenPrice() + dPropSLRatio*(Bid - OrderOpenPrice()) - dSpread,4 );
- if(OrderStopLoss() < dSl)
- arrSL[1]=dSl;
- }
- else
- {
- if(dTrailingStop != 0)
- arrSL[2]=dnBid - dTrailingStop;
- }
- }
- dSl=arrSL[ArrayMaximum(arrSL)];
- LogSL("OP_BUY - max",dSl,arrSL[0],arrSL[1],arrSL[2],arrSL[3]);
- if( dSl > OrderStopLoss() || OrderStopLoss() == 0 )
- {
- OrderModify(OrderTicket(), OrderOpenPrice(),
- dSl, OrderTakeProfit(), 0, Yellow);
- Log("Buy - modify", OrderOpenPrice(), dSl, OrderTakeProfit());
- }
- // Escape buy
- //if( dEscape != 0 && dnBid < OrderOpenPrice() - dEscape - 5 * Point )
- if( nUseEscape == 1 && dnBid < OrderOpenPrice() - dEscapeLevel - 5 * Point )
- {
- OrderModify(OrderTicket(), OrderOpenPrice(),
- OrderStopLoss(), OrderOpenPrice() + dEscapeTP, 0, Aqua);
- Log("Buy - EscapeLevel", OrderOpenPrice(), dSl, OrderTakeProfit());
- }
复制代码
上述代码中,使用dSl = NormalizeDouble( OrderOpenPrice() + dPropSLRatio*(Bid - OrderOpenPrice()) - dSpread,4 );进行动态调整,dPropSLRatio可以考虑设置为0.382这个黄金比例。 另外当现价低于一定程度时,设置一个较小的止盈目标位,及时逃脱。 |