EA: Cidomo - 页 2

 

接下来是代码:

//--- 检查冻结和停止水平
/*
 订单类型/仓位 | 激活价格 | 检查
 ------------------------|--------------------|--------------------------------------------
 买入限价订单| Ask| Ask-OpenPrice >= SYMBOL_TRADE_FREEZE_LEVEL
 买入止损单| 卖出| 开盘价-卖出价 >= SYMBOL_TRADE_FREEZE_LEVEL
 卖出限价订单| 开盘价-出价= SYMBOL_TRADE_FREEZE_LEVEL
 卖出止损单| 买价Bid-OpenPrice >= SYMBOL_TRADE_FREEZE_LEVEL
 买入头寸| 出价| TakeProfit-Bid >= SYMBOL_TRADE_FREEZE_LEVEL
 || Bid-StopLoss >= SYMBOL_TRADE_FREEZE_LEVEL
 卖出位置| 卖出| Ask-TakeProfit >= SYMBOL_TRADE_FREEZE_LEVEL
 | |StopLoss-Ask >= SYMBOL_TRADE_FREEZE_LEVEL
 
 按卖出价买入| 按买入价卖出
 ------------------------------------------------|----------------------------------
 TakeProfit >= Bid| 获利<= Ask
 StopLoss<= 买入价| StopLoss>= Ask
 TakeProfit - Bid >= SYMBOL_TRADE_STOPS_LEVEL |Ask - TakeProfit >= SYMBOL_TRADE_STOPS_LEVEL
 Bid - StopLoss > = SYMBOL_TRADE_STOPS_LEVEL= SYMBOL_TRADE_STOPS_LEVEL | StopLoss - Ask >= SYMBOL_TRADE_STOPS_LEVEL
*/
   if(!RefreshRates() || !m_symbol.Refresh())
     {
      PrevBars=0;
      return;
     }
//--- 冻结级别 -> 用于挂单和修改
   double freeze_level=m_symbol.FreezeLevel()*m_symbol.Point();
   if(freeze_level==0.0)
      freeze_level=(m_symbol.Ask()-m_symbol.Bid())*3.0;
   freeze_level*=1.1;

这里的计算不清楚:

freeze_level=(m_symbol.Ask()-m_symbol.Bid())*3.0;

freeze_level*=1.1;

目的是什么?为什么要乘以 *3.0 和 *=1.1。

 
Sysmart:

代码如下

这里的计算并不清楚:

freeze_level=(m_symbol.Ask()-m_symbol.Bid())*3.0;

freeze_level*=1.1;

目的是什么?为什么要乘以 *3.0 和 *=1.1。

主要任务是切断剥头皮者和点差者。

 

OnTradeTransaction 功能对我来说非常神秘,如果可能的话,请尽可能详细地解释一下这里发生了什么:

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_ticket       =0;
      long     deal_order        =0;
      long     deal_time         =0;
      long     deal_time_msc     =0;
      long     deal_type         =-1;
      long     deal_entry        =-1;
      long     deal_magic        =0;
      long     deal_reason       =-1;
      long     deal_position_id  =0;
      double   deal_volume       =0.0;
      double   deal_price        =0.0;
      double   deal_commission   =0.0;
      double   deal_swap         =0.0;
      double   deal_profit       =0.0;
      string   deal_symbol       ="";
      string   deal_comment      ="";
      string   deal_external_id  ="";
      if(HistoryDealSelect(trans.deal))
        {
         deal_ticket       =HistoryDealGetInteger(trans.deal,DEAL_TICKET);
         deal_order        =HistoryDealGetInteger(trans.deal,DEAL_ORDER);
         deal_time         =HistoryDealGetInteger(trans.deal,DEAL_TIME);
         deal_time_msc     =HistoryDealGetInteger(trans.deal,DEAL_TIME_MSC);
         deal_type         =HistoryDealGetInteger(trans.deal,DEAL_TYPE);
         deal_entry        =HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
         deal_magic        =HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
         deal_reason       =HistoryDealGetInteger(trans.deal,DEAL_REASON);
         deal_position_id  =HistoryDealGetInteger(trans.deal,DEAL_POSITION_ID);

         deal_volume       =HistoryDealGetDouble(trans.deal,DEAL_VOLUME);
         deal_price        =HistoryDealGetDouble(trans.deal,DEAL_PRICE);
         deal_commission   =HistoryDealGetDouble(trans.deal,DEAL_COMMISSION);
         deal_swap         =HistoryDealGetDouble(trans.deal,DEAL_SWAP);
         deal_profit       =HistoryDealGetDouble(trans.deal,DEAL_PROFIT);

         deal_symbol       =HistoryDealGetString(trans.deal,DEAL_SYMBOL);
         deal_comment      =HistoryDealGetString(trans.deal,DEAL_COMMENT);
         deal_external_id  =HistoryDealGetString(trans.deal,DEAL_EXTERNAL_ID);
        }
      else
         return;
      if(deal_symbol==m_symbol.Name() && deal_magic==m_magic)
         if(deal_entry==DEAL_ENTRY_IN)
            if(deal_type==DEAL_TYPE_BUY || deal_type==DEAL_TYPE_SELL)
              {
               m_need_delete_buy_stop  = true;
               m_need_delete_sell_stop = true;
              }
     }
  }
 

在表达式中:

      double tp=(InpTakeProfit==0)?0.0:price+ExtTakeProfit;
      if(tp!=0.0 && ExtTakeProfit<level) // 查看价格
         tp=price+ExtTakeProfit;

我认为有一个错误,应该是:tp=price+level

 

您好,我的朋友,感谢您提供的 EA,我在演示版中试用了一下,效果很好,可以打开并执行定单。


但当我尝试在真实账户中使用时,它却被拒绝了。有什么好办法可以帮助我,我想在真实账户 中尝试一下。


谢谢

 
Mazyad AlAdwani :

你好,我的朋友,感谢您提供的 EA,我在演示版中试用了一下,效果很好,可以打开并平仓。


但当我尝试在真实账户中使用时,它却被拒绝了。有什么好办法可以帮助我,我想在真实账户 中尝试一下。


衷心感谢

很遗憾,我无法远距离读心。另外,全职的心灵感应者正在休假。因此:请提供此类数据(在技术资源上提供技术数据是一种良好做法)

  • 交易账户的货币和余额
  • 顾问设置
  • 日志文件(来自 "专家 "选项卡和 "日志 "选项卡)
 
Vladimir Karputov:

不幸的是,我不能远距离读心。另外,全职的心灵感应者正在休假。因此:请提供此类数据(在技术资源上提供技术数据是一种良好做法)

  • 交易账户的货币和余额
  • 顾问设置
  • 日志文件(来自 "专家 "选项卡和 "日志 "选项卡)
  • 交易账户的货币和余额
  • GPBUSD - 80 美元


  • 顾问设置


  • 日志文件(来自 "专家 "选项卡和 "日志 "选项卡)

提前感谢您,很抱歉没有把所有这些都放在第一位,我是新手,但正在学习,。



 

我想在真实账户中使用它,有什么新消息吗?

 
Mazyad AlAdwani :

我想在真实账户中使用它,有什么新消息吗?

先学会阅读。这里是技术论坛,如果您被要求执行某些操作 - 您必须执行这些操作。


关于交易、自动交易系统和测试交易策略的论坛

专家:Cidomo

Vladimir Karputov, 2020.06.03 05:08

很遗憾,我不能远距离读心。另外,专职心灵感应者正在休假。因此:请提供此类数据(在技术资源上提供技术数据是一种良好做法)

  • 交易账户的货币和余额
  • 顾问设置
  • 日志文件(来自 "专家 "选项卡和 "日志 "选项卡)

 
Vladimir Karputov:

先学会阅读。这里是技术论坛,如果要求您执行某些操作,您必须执行这些操作。



对不起。我在第一个回复中发送了图片,但我没有注意到它们被删除了!


总之,我制作了视频,您可以观看