- 发布者:
- Vladimir Karputov
- 显示:
- 1259
- 等级:
- 已发布:
- 2017.08.18 09:25
- 已更新:
- 2018.02.27 13:24
-
需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务
MQL5 代码作者: Vladimir Karputov.
该EA交易会等待获利或止损触发之后,再在相反方向上建立仓位。在发送交易请求之前它会检查是否有足够的资金。OnTradeTransaction.
例如,我们有了一个已经建立的买入仓位,当触发了获利或者止损时,就建立一个新的卖出仓位。然后,在触发了获利或者止损之后,就又建立一个新的买入仓位。
交易的关闭是在"OnTradeTransaction中监控的":
//+------------------------------------------------------------------+ //| TradeTransaction 函数 | //+------------------------------------------------------------------+ void OnTradeTransaction(const MqlTradeTransaction &trans, const MqlTradeRequest &request, const MqlTradeResult &result) { //--- 取得事务类型,为枚举值 ENUM_TRADE_TRANSACTION_TYPE type=trans.type; //--- 如果事务是历史中加上的结果 if(type==TRADE_TRANSACTION_DEAL_ADD) { long deal_entry =0; long deal_type =0; string deal_symbol =""; long deal_magic =0; long deal_time =0; if(HistoryDealSelect(trans.deal)) { deal_entry=HistoryDealGetInteger(trans.deal,DEAL_ENTRY); deal_type=HistoryDealGetInteger(trans.deal,DEAL_TYPE); deal_symbol=HistoryDealGetString(trans.deal,DEAL_SYMBOL); deal_magic=HistoryDealGetInteger(trans.deal,DEAL_MAGIC); deal_time=HistoryDealGetInteger(trans.deal,DEAL_TIME); } else return; if(deal_symbol==m_symbol.Name() && deal_magic==m_magic) { if(deal_entry==DEAL_ENTRY_OUT) { if(deal_type==DEAL_TYPE_BUY || deal_type==DEAL_TYPE_SELL) { if(deal_type==DEAL_TYPE_BUY) m_close_pos_type=POSITION_TYPE_SELL; else if(deal_type==DEAL_TYPE_SELL) m_close_pos_type=POSITION_TYPE_BUY; else return; m_is_trade=true; } } else if(deal_entry==DEAL_ENTRY_IN) { m_is_trade=false; } } } }
在 OrderSend 之前检查交易量 (以建立买入仓位为例):
//+------------------------------------------------------------------+ //| 建立买入仓位 | //+------------------------------------------------------------------+ void OpenBuy(double sl,double tp) { sl=m_symbol.NormalizePrice(sl); tp=m_symbol.NormalizePrice(tp); //--- 在 OrderSend 之前检查交易量以避免 "资金不足" 的错误 (CTrade) double check_volume_lot=m_trade.CheckVolume(m_symbol.Name(),InpLots,m_symbol.Ask(),ORDER_TYPE_BUY); if(check_volume_lot!=0.0) { if(check_volume_lot>=InpLots) { if(m_trade.Buy(InpLots,NULL,m_symbol.Ask(),sl,tp)) { if(m_trade.ResultDeal()==0) { Print("买入 -> 错误. 结果返回值: ",m_trade.ResultRetcode(), ", 结果的描述: ",m_trade.ResultRetcodeDescription()); } else { Print("Buy -> true. 结果返回值: ",m_trade.ResultRetcode(), ", 结果的描述: ",m_trade.ResultRetcodeDescription()); } } else { Print("买入 -> 错误. 结果返回值: ",m_trade.ResultRetcode(), ", 结果的描述: ",m_trade.ResultRetcodeDescription()); } } else { m_is_trade=false; } } else { m_is_trade=false; } //--- }
由MetaQuotes Ltd译自俄语
原代码: https://www.mql5.com/ru/code/18294

烛形的大小,大小是根据下面的公式来计算的: "被减数" 减去 "减数"。

有关当前交易品种的所有信息 (使用了来自 CSymbolInfo 类对象的信息),体现为一个对话框面板。

在一个窗口中的两个柱形图,显示了距离初始值的最大平均价格偏移点数。

在指标输入参数中带有时段选择选项的 TotalPowerIndicatorX 指标。