错误、漏洞、问题 - 页 770

 
maryan.dirtyn:
...

p.s. 那些告诉我使用标准库 的人请不要打扰,我喜欢知道我的专家在做什么,而不是希望它以后不会变平。

至少可以查看/研究标准库,你可以了解犯了什么错误。一个非常好的机会。
 

我在过去的6个小时里一直在尝试这样做,我倾向于认为这是不可能的。

我不打算使用任何标准的东西,如果你能原谅我的话...

 
maryan.dirtyn:

我在过去的6个小时里一直在尝试这样做,我倾向于认为这是不可能的。

我不会使用任何标准的东西,如果你能原谅我......

是什么让你对标准库 如此恐惧?看看Trade.mqh 文件里有什么。

功能是打开一个位置。

//+------------------------------------------------------------------+
//| Open position.                                                   |
//+------------------------------------------------------------------+
bool CTrade::PositionOpen(const string symbol,const ENUM_ORDER_TYPE order_type,const double volume,
                          const double price,const double sl,const double tp,const string comment)
  {
//--- check stopped
   if(IsStopped(__FUNCTION__)) return(false);
//--- clean
   ClearStructures();
//--- checking
   if(order_type!=ORDER_TYPE_BUY && order_type!=ORDER_TYPE_SELL)
     {
      m_result.retcode=TRADE_RETCODE_INVALID;
      m_result.comment="Invalid order type";
      return(false);
     }
//--- setting request
   m_request.action      =TRADE_ACTION_DEAL;
   m_request.symbol      =symbol;
   m_request.magic       =m_magic;
   m_request.volume      =volume;
   m_request.type        =order_type;
   m_request.price       =price;
   m_request.sl          =sl;
   m_request.tp          =tp;
   m_request.deviation   =m_deviation;
   m_request.type_filling=m_type_filling;
   m_request.comment     =comment;
//--- action and return the result
   return(OrderSend(m_request,m_result));
  }

//---

你应该同意,这与你要做的事情没有太大的区别。请注意函数ClearStructures()。如果需要在开仓后设置止损,那么以下功能将帮助你完成。

//+------------------------------------------------------------------+
//| Modify specified opened position.                                |
//+------------------------------------------------------------------+
bool CTrade::PositionModify(const string symbol,const double sl,const double tp)
  {
//--- check stopped
   if(IsStopped(__FUNCTION__)) return(false);
//--- clean
   ClearStructures();
//--- setting request
   m_request.action=TRADE_ACTION_SLTP;
   m_request.symbol=symbol;
   m_request.sl    =sl;
   m_request.tp    =tp;
//--- action and return the result
   return(OrderSend(m_request,m_result));
  }

//---

它很简单,一切都很好用。然后你可以根据你的需要增加/改变/实验。

Документация по MQL5: Стандартная библиотека
Документация по MQL5: Стандартная библиотека
  • www.mql5.com
Стандартная библиотека - Документация по MQL5
 
maryan.dirtyn:

我在过去的6个小时里一直在尝试这样做,我倾向于认为这是不可能的。

我不会使用任何标准的,如果你不介意的话......

特别是对你来说。

#include <trade\trade.mqh>
void OnStart()
  {
   CTrade trade;
   trade.Buy(1.0,"EURUSD",SymbolInfoDouble("EURUSD",SYMBOL_ASK),1.20000,1.50000,"Yeah, baby!");
  }

要触摸未知的东西,只需将这段代码插入脚本中,进行编译,然后将光标放在Buy上,按Alt + G。

你将开始在所有图书馆的内部进行旅行。同时看一下错误处理

 
Renat:

特别是对你来说。

要触摸未知的东西,只需将这段代码插入到脚本中,编译它,然后将光标放在 "购买 "上,按Alt+G。

你将开始穿越所有库的内部结构。同时看一下错误处理。


"Yeah, baby!"
你甚至可以说出上述内容,一切都会好起来的。)))
 

我认为没有其他方法可以做到这一点,是吗?

#include <trade\trade.mqh>
 
maryan.dirtyn:

我认为没有其他方法可以做到这一点,是吗?

在主文件中制作类似的函数,你就不需要插入任何东西了。
 

这就是我在做的事情))...第六个小时......我无法找出错误所在

不愿意使用标准库 的原因是,标志和全局变量是在函数中使用的,拆开trade.mqh和其他部分似乎不太合理

void OnTick(){ if(PositionsTotal()<1){OPEN();}}

bool OPEN(){
             MqlTradeRequest request; ZeroMemory(request);
             MqlTradeResult  result;  ZeroMemory(result);
             

             request.symbol       = _Symbol;
             request.action       = TRADE_ACTION_DEAL;
             request.type_filling = ORDER_FILLING_FOK;
             request.deviation    = 100;
             request.volume       = NormalizeDouble(2,2);
             request.type         = ORDER_TYPE_BUY;
             request.price        = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
             request.tp           = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK) + 500*_Point,_Digits);
             request.sl           = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK) - 500*_Point,_Digits);

             OrderSend(request,result);     
                        
             if(result.retcode==10009 || result.retcode==10008)  Print("Succsesful open");
             else                                               Print("Error open: ",DoubleToString(GetLastError(),0),"  response code: ",result.retcode);
    
   return(true);}
 
maryan.dirtyn:

这就是我在做的事情))...第六个小时......我无法找出错误所在

我不想使用标准库,因为标志和全局变量是在函数中使用的,而且将trade.mqh和其他函数按部分分解似乎不太合理

你是在哪个服务器上,用什么符号?

我在MetaQuotes-Demo上运行了你的代码,交易很成功。

2012.07.11 15:08:36     Trades  '1026582': deal #109507221 buy 2.00 EURUSD at 1.22625 done (based on order #115678901)
2012.07.11 15:08:36     Trades  '1026582': order #115678901 buy 2.00 / 2.00 EURUSD at 1.22625 done
2012.07.11 15:08:36     Trades  '1026582': instant buy 2.00 EURUSD at 1.22627 sl: 1.22127 tp: 1.23127 (deviation: 100)
 

MetaQuotes-Demo

登录:1219233

欧元兑美元

我刚刚在英镑上试了一下,同样的情况,没有停止,我在测试器中做了所有的事情。

建设655(如果有帮助的话)

原因: