エキスパート: TrailingStopAndTake

 

TrailingStopAndTake:

ポジションのストップロスとテイクプロフィットをシンプルに追跡します。

作者: Scriptor

 
//+------------------------------------------------------------------+
//| StopLevelに対する正しいStopLossを返します。
//+------------------------------------------------------------------+
double CorrectStopLoss(const string symbol_name,const ENUM_POSITION_TYPE position_type,const int stop_loss) {
   if(stop_loss==0) return 0;
   double pt=SymbolInfoDouble(symbol_name,SYMBOL_POINT);
   if(pt==0) return 0;
   double price=(position_type==POSITION_TYPE_BUY ? SymbolInfoDouble(symbol_name,SYMBOL_ASK) : SymbolInfoDouble(symbol_name,SYMBOL_BID));
   int lv=StopLevel(symbol_name),dg=(int)SymbolInfoInteger(symbol_name,SYMBOL_DIGITS);
   return
     (position_type==POSITION_TYPE_BUY ?
      NormalizeDouble(::fmin(price-lv*pt,price-stop_loss*pt),dg) :
      NormalizeDouble(::fmax(price+lv*pt,price+stop_loss*pt),dg)
     );
}
//+------------------------------------------------------------------+
//| StopLevelに対してStopLossが正しいかチェックする。
//+------------------------------------------------------------------+
bool CheckCorrectStopLoss(const string symbol_name,const ENUM_POSITION_TYPE position_type,const double stop_loss)
  {
   if(stop_loss==0) return true;
   double pt=SymbolInfoDouble(symbol_name,SYMBOL_POINT);
   if(pt==0) return false;
   double price=(position_type==POSITION_TYPE_BUY ? SymbolInfoDouble(symbol_name,SYMBOL_ASK) : SymbolInfoDouble(symbol_name,SYMBOL_BID));
   int lv=StopLevel(symbol_name),dg=(int)SymbolInfoInteger(symbol_name,SYMBOL_DIGITS);
   return
     (
      position_type==POSITION_TYPE_BUY ? 
      NormalizeDouble(stop_loss-price- lv*pt,dg)<0 :
      NormalizeDouble(stop_loss-price+ lv*pt,dg)>0
     );
  }

エラーが強調されている。

 
fxsaber:

エラーが強調表示されます。

   double price=(position_type==POSITION_TYPE_BUY ? SymbolInfoDouble(symbol_name,SYMBOL_ASK) : SymbolInfoDouble(symbol_name,SYMBOL_BID));
   int lv=StopLevel(symbol_name),dg=(int)SymbolInfoInteger(symbol_name,SYMBOL_DIGITS);
   return
     (position_type==POSITION_TYPE_BUY ?
      NormalizeDouble(::fmin(price-lv*pt,price-stop_loss*pt),dg) :
      NormalizeDouble(::fmax(price+lv*pt,price+stop_loss*pt),dg)
     );

エラーは何ですか?

 
Artyom Trishkin:

何が間違いなのか?

価格が間違っている。

 
fxsaber:

価格が間違っている。

正当化してください。
 
Artyom Trishkin:
正当化する。
OrderSend(_Symbol, OP_BUY, 1, Ask, 100, 0, Bid);

StopLevel==0のときに動作します。

 
MT4バージョンはありますか?
 

よくやった!本当にありがとう!

 
使いやすい。トップ。素晴らしい。
 

こんにちは。


あなたのEAを使おうとしているのですが、コード1でアウトしてしまいます。

それはブラジルのIBOV市場です。

 
トレーリングストップは、価格が離れても調整されないようです。何か見落としがあるのでしょうか?