GMT offset値が適正値かチェックしてください。
FXPro でしたら現在は +2 ではないかと思います。
ziomatrix さんが書きました:GMT offset値が適正値かチェックしてください。
FXPro でしたら現在は +2 ではないかと思います。
polarB さんが書きました:mimi さんが書きました:下記はパラメーターで設定できるのでしょうか?それともコードを追加するのでしょうか?
↓
稼働に関して私は+10pip時点で+-0にストップを移動するようにしてます。
横からですが、
下記のようにすれば動作すると思います。
3,5DigitsブローカーはBE_marginを10倍して下さい。
(ストップ移動をオープンプライスのみにして簡略化してます)
1:グローバル変数の追加
- コード: 全て選択
extern bool UseBE = false;//add for Break Even
extern double BE_margin = 10.0;//add for Break Even
2:[オープンポジションの抽出]に2行追記 (参照:add for Break Even)
- コード: 全て選択
//+------------------------------------------------------------------+
//| オープンポジションの抽出 |
//+------------------------------------------------------------------+
//ポジション数の確認およびラストオーダーの金額の抽出
double LastPrice = 0;
double LastStopLossPrice = 0;//add for Break Even
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true){ //注文ポジションの選択
if(OrderMagicNumber() != Mc1Number) continue;//マジックナンバー
if(OrderType()==OP_BUY)pos1++;
if(OrderType()==OP_SELL)pos2++;
LastPrice=OrderOpenPrice();
LastStopLossPrice=OrderStopLoss();//add for Break Even
}
}
int posX = pos1+pos2;
if((posX==0)||(posX > NumPos))
{
NumPos=posX;
if(NumPos>1 && UseStopLoss &&StopLossstep)Changes_Stoploss(Mc1Number,NumPos);
}
3:[121用決済条件]に2行追記
- コード: 全て選択
//121用決済条件
//買ポジ決済
double Current_Profit_Buy = Bid-LastPrice;
if((UseTakeProfit)&&(pos1>0)&&(TPf>TakeProfit)&&(Current_Profit_Buy>(TakeProfit*Point)))ClosePositions(0,SIGNAL_CLOSEBUY,Mc1Number);
if(UseBE && pos1>0 && Current_Profit_Buy > BE_margin*Point && LastStopLossPrice < LastPrice) BreakEven_Function(Mc1Number);//add for Break Even
//売ポジ決済
double Current_Profit_Sell = LastPrice-Ask;
if((UseTakeProfit)&&(pos2>0)&&(TPf>TakeProfit)&&(Current_Profit_Sell>(TakeProfit*Point)))ClosePositions(0,SIGNAL_CLOSESELL,Mc1Number);
if(UseBE && pos2>0 && Current_Profit_Sell > BE_margin*Point&& LastStopLossPrice > LastPrice) BreakEven_Function(Mc1Number);//add for Break Even
4:BreakEvenコード追加
- コード: 全て選択
void BreakEven_Function(int MagicNumberF)
{
int Error ;
int Total = OrdersTotal()-1;
for(int i=Total;i>=0;i--) {
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) break;
if(OrderMagicNumber() != MagicNumberF || OrderSymbol() != Symbol()) continue;
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Yellow);
Error = GetLastError();
if(Error!=0) Print("Break Even Error OrderTicket = ", OrderTicket());
break;
}
}
take2 さんが書きました:お世話になっています。
以下のブレークイーブンコードを組み込ませて貰ったのですがナンピン等で複数ポジションがある場合に一番最初のポジションだけにブレークイーブンが実行され残りのポジションにはブレークイーブンが実行されない事が多々あるのですがどこを変えれば残りの全てのポジションにも適用されますでしょうか。お手数ですがご教示願えればと思います。
//121用決済条件
//買ポジ決済
double Current_Profit_Buy = Bid-LastPrice;
if((UseTakeProfit)&&(pos1>0)&&(TPf>TakeProfit)&&(Current_Profit_Buy>(TakeProfit*Point)))ClosePositions(0,SIGNAL_CLOSEBUY,Mc1Number);
if(UseBE && pos1>0 && Current_Profit_Buy > BE_margin*Point && LastStopLossPrice+0.5*Point < LastPrice) BreakEven_Function(Mc1Number);//add for Break Even
//売ポジ決済
double Current_Profit_Sell = LastPrice-Ask;
if((UseTakeProfit)&&(pos2>0)&&(TPf>TakeProfit)&&(Current_Profit_Sell>(TakeProfit*Point)))ClosePositions(0,SIGNAL_CLOSESELL,Mc1Number);
if(UseBE && pos2>0 && Current_Profit_Sell > BE_margin*Point&& LastStopLossPrice-0.5*Point > LastPrice) BreakEven_Function(Mc1Number);//add for Break Eventake2 さんが書きました:最近ナンピンを使用する事があり2~3回ナンピンする場合においてTP40で半分の15~20pipsでブレークイーブンへと設定していますがTP寸前で反転して一番新しいポジションが同値撤退、残りはSLにかかる事が数回ありました。
//121用決済条件
//買ポジ決済
double Current_Profit_Buy = Bid-LastPrice;
if((UseTakeProfit)&&(pos1>0)&&(TPf>TakeProfit)&&(Current_Profit_Buy>(TakeProfit*Point)))ClosePositions(0,SIGNAL_CLOSEBUY,Mc1Number);
//if(UseBE && pos1>0 && Current_Profit_Buy > BE_margin*Point && LastStopLossPrice+0.5*Point < LastPrice) BreakEven_Function(Mc1Number);//add for Break Even
if(UseBE && pos1>0 && Current_Profit_Buy > BE_margin*Point) BreakEven_Function2(Mc1Number);//add for Break Even
//売ポジ決済
double Current_Profit_Sell = LastPrice-Ask;
if((UseTakeProfit)&&(pos2>0)&&(TPf>TakeProfit)&&(Current_Profit_Sell>(TakeProfit*Point)))ClosePositions(0,SIGNAL_CLOSESELL,Mc1Number);
//if(UseBE && pos2>0 && Current_Profit_Sell > BE_margin*Point&& LastStopLossPrice-0.5*Point > LastPrice) BreakEven_Function(Mc1Number);//add for Break Even
if(UseBE && pos2>0 && Current_Profit_Sell > BE_margin*Point) BreakEven_Function2(Mc1Number);//add for Break Even
void BreakEven_Function2(int MagicNumberF)
{
int Error ;
int Total = OrdersTotal()-1;
for(int i=Total;i>=0;i--) {
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) break;
if(OrderMagicNumber() != MagicNumberF || OrderSymbol() != Symbol()) continue;
{
int type = OrderType();
switch(type)
{
case OP_BUY:
if((Bid - OrderOpenPrice() < BE_margin*Point)
||(OrderStopLoss()+0.5*Point > OrderOpenPrice())
)continue;
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Yellow);
Error = GetLastError();
if(Error!=0) Print("Break Even Error OrderTicket = ", OrderTicket());
break;
case OP_SELL:
if((OrderOpenPrice() - Ask < BE_margin*Point)
||(OrderStopLoss()-0.5*Point < OrderOpenPrice())
)continue;
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Yellow);
Error = GetLastError();
if(Error!=0) Print("Break Even Error OrderTicket = ", OrderTicket());
break;
}
}
}
}
このフォーラムを閲覧中のユーザー: なし & ゲスト[1人]