EA: 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)
     );
}
//+------------------------------------------------------------------+
//| 检查 StopLoss 与 StopLevel 的关系是否正确。
//+------------------------------------------------------------------+
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 市场,覆盖合约和真实账户

 
当价格进一步移动时,跟踪止损似乎不会调整。是我遗漏了什么吗?