
トレーリングストップ&イーブンイフ
トレーリングストップとイーブンイフ機能を兼ね合わせたサンプルソースをご紹介します。 保持中の全てのオーダを対象にトレーリングストップとイーブンイフの判定を行います。複数ペア通貨でも対応しています。
サンプルソース
/*------------------------------------------------------
関数名 openOrderTraling
内容 トレーリング
引数 なし
戻り値 なし
-------------------------------------------------------*/
extern double TrailingStopS = 50;//トレーリングスタート
extern double TrailingStopW = 25;//トレーリング幅
extern double lossLimit = 5;
extern double lossLimitdiff = 40;
void openOrderTralingEvenIf(){
for( int i=0; i < OrdersTotal(); i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
// sl値変更
bool ret = false;
if(OrderType() == OP_BUY ){
//トレーリングストップ
if(MarketInfo(OrderSymbol(),MODE_BID) - OrderOpenPrice() > TrailingStopS*Point && OrderStopLoss() < MarketInfo(OrderSymbol(),MODE_BID)-TrailingStopW*Point){
ret = OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStopW,OrderTakeProfit(),0,Green);
}
//イーブンイフ
if( MarketInfo(OrderSymbol(),MODE_BID) > OrderOpenPrice()+(lossLimit+lossLimitdiff)*Point && OrderStopLoss() < OrderOpenPrice()+lossLimit*Point ){
ret = OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+lossLimit*Point,OrderTakeProfit(),0,Green);
}
}
if(OrderType() == OP_SELL ){
//トレーリングストップ
if(OrderOpenPrice() - MarketInfo(OrderSymbol(),MODE_ASK) > TrailingStopS*Point && OrderStopLoss()> MarketInfo(OrderSymbol(),MODE_ASK)+TrailingStopW*Point){
ret = OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStopW,OrderTakeProfit(),0,Orange);
}
//イーブンイフ
if( MarketInfo(OrderSymbol(),MODE_ASK) < OrderOpenPrice()-(lossLimit+lossLimitdiff)*Point && OrderStopLoss() > OrderOpenPrice()-lossLimit*Point ){
ret = OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-lossLimit*Point,OrderTakeProfit(),0,Orange);
}
}
}
}
}