初学者的问题 MQL5 MT5 MetaTrader 5 - 页 63

 

Gumko:

Gumko : 那这个任务要多久才会先出现......?

它已经站立了2天了。

我等了8-10天,然后我放弃了,把它关掉了。
 
我想知道Tester软件在后台的CPU负载有多大?
 

大家好。

修改和问题。

外部功能。

bool ModifyPosition(const string symbol,double StopLoss,double Takeprofit){
//---- 绑定结构和交易结果
MqlTradeRequest请求。
MqlTradeResult结果。
//---- 结构初始化的交易搜索 MqlTradeRequest的头寸修改
request.action =TRADE_ACTION_SLTP;
request.symbol = symbol;
request.sl = StopLoss;
request.tp = Takeprofit;
字符串=""。
StringConcatenate(word.)
"<<============ Modifyposition(): 修改位置 ",
符号," ============ >>")。
打印(word)。
//---- 修改仓位并检查交易搜索的结果
if(!OrderSend(request,result) || result.deal==0)
{
Print("Modify error =", GetLastError();
return(false)。
}
return(true)。
}

但它并不像这样工作。

如何做?

谢谢你 :)

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций - Документация по MQL5
 
mario065: 但它不像那样工作,我怎么做呢? 谢谢你 :)

这样试试吧。

MqlTradeRequest request={0};
MqlTradeResult  result ={0};
 
Yedelkin:

这样试试吧。

耶德尔金。

谢谢你,它没有发挥作用。

我检查了它是否正确计算了函数调用的开始。

我是这样做的。

double Bid = NormalizeDouble(SymbolInfoDouble(Currency,SYMBOL_BID),_Digits)。
double Ask = NormalizeDouble(SymbolInfoDouble(Currency,SYMBOL_ASK),_Digits)。
double Open = NormalizeDouble(PositionGetDouble(POSITION_PRICE_OPEN),_Digits) 。
double SL = NormalizeDouble(PositionGetDouble(POSITION_SL),_Digits)。
如果(Open>0){
start_buy = Ask - Open; Print("start_buy=",start_buy);
start_sel = Open - Bid;Print("start_sel=",start_sel);
}

日志中的惊喜。

MR 0 Core 1 10:21:49 2012.10.01 10:12:42 交易#2在1.28146卖出0.10欧元美元 完成(基于订单#2)。
GH 0 Core 1 10:21:49 2012.10.01 01:12:42 交易执行 [#2在1.28146卖出0.10 EURUSD]
NI 0 Core 1 10:21:49 2012.10.01 01:12:42 订单执行 在1.28146卖出0.10 [#2 在1.28146卖出0.10 EURUSD (0.00000)
OF 0 核心 1 10:21:49 2012.10.01 01:12:43 start_buy=0.00012999999999635
DR 0 Core 1 10:21:49 2012.10.01 01:12:43start_sel=5.000000000010552e-005
LE 0 Core 1 10:21:49 2012.10.01 01:12:43 start_buy=0.00010999999998325
EN 0 核心 1 10:21:49 2012.10.01 01:12:43start_sel=7.00000000000145-005

当然,我只是想知道Sela,这些数字是怎么来的?

我想我写的函数是正确的,如图所示。

SL和TP的修改

修改StopLoss和/或TakeProfit水平的交易指令。需要4个字段。

  • 行动
  • 符号
  • SL
  • TP
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства позиций
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства позиций
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства позиций - Документация по MQL5
 
mario065: 谢谢你,它没有发挥作用。

那么,究竟什么是 "失败"?

mario065 : 我检查了它是否正确地开始了函数调用,这是我的做法。

正确插入代码(Ctrl+Alt+M)。

  double Bid  = NormalizeDouble(SymbolInfoDouble(Currency,SYMBOL_BID),_Digits);
  double Ask  = NormalizeDouble(SymbolInfoDouble(Currency,SYMBOL_ASK),_Digits);
  double Open = NormalizeDouble(PositionGetDouble(POSITION_PRICE_OPEN),_Digits);
  double SL   = NormalizeDouble(PositionGetDouble(POSITION_SL),_Digits);
  if(Open > 0)
    {
     start_buy = Ask - Open;Print("start_buy=",start_buy);
     start_sel = Open - Bid;Print("start_sel=",start_sel);
    }

在这里,归一化必须以不同的顺序来使用。

1.由于SymbolInfoDouble(Currency,SYMBOL_BID)类型的值来自服务器,它们已经被认为是标准化的。而且没有必要对它们进行第二次正常化。也就是说,你可以直接写他们。

double Bid  = SymbolInfoDouble(Currency,SYMBOL_BID);

2.但是在任何算术运算 之后,归一化就消失了,所以如果你需要得到一个归一化的数字,你应该这样写。

start_buy = NormalizeDouble(Ask - Open,_Digits);

我还在考虑其他的问题。

 
mario065: 日志中的惊喜。

DR 0 Core 1 10:21:49 2012.10.01 01:12:43start_sel=5.000000000010552e-005
EN 0 Core 1 10:21:49 2012.10.01 01:12:43start_sel=7.0000000145e-005

当然,只对塞尔感兴趣--这样的数字是怎么来的?

7.00000000000145e-005 只是写实数的一种方式。我想这叫 "科学"。更多细节见。"MQL5参考指南 /语言基础知识/ 数据类型/ 实数类型(double, float)"。
 
Yedelkin:
7.00000000000145e-005 只是实数数值的一种写法。我想这叫 "科学"。更多细节见。"MQL5参考指南 /语言基础知识/ 数据类型/ 实数类型(double, float)"。

耶德尔金。

谢谢你解决了这个问题。

这里是代码,开仓的函数是由Nikolay Kositsin编写的。

附加的文件:
MTB_E.mq5  9 kb
 
请告知在EA中如何以及在哪里指定属于2号窗口的MA。
例如,我在MFI中添加了MA,我想在我的EA中注册这个MA。我不知道在哪里和如何做。

谢谢你的答复)
 
mario065: 以下是代码。开设该职位的职能是由尼古拉-科西津撰写的。尼古拉-科西津。

1.我想说的是:使用别人的代码要非常小心。因为别人的代码也意味着别人的错误。

2.在这里(https://www.mql5.com/ru/forum/6343/page64#comment_357008),我建议你在使用变量之前尝试正确地将其归零。但你的代码还没有实现这个建议。此外,你的代码包含以下类型的结构。

//+------------------------------------------------------------------+
//| Modify position.                                                 |
//+------------------------------------------------------------------+
bool ModifyPosition(const string symbol,double StopLoss,double Takeprofit)
  {
//---- обявяване на структурата и резултата на търговското искане
   MqlTradeRequest request;
   MqlTradeResult result;
//---- структурна инициализация на  търговското искане MqlTradeRequest за модифициране на  позиция
   request.action       = ...
   request.symbol       = ...
   request.sl           = ...
   request.tp           = ...
   ...
//---- модифицираме позицията и  проверяваме резултата от търговското искане
   if(!OrderSend(request,result) || result.deal==0)
     {
      ...
     }
   ZeroMemory(request);
   ZeroMemory(result);
   return(true);
  }

你看,在这个结构中,请求和结果变量不是在使用之前而是在使用之后 被清零。此外,当这些局部变量被归零时,函数就会停止运行,也就是说,这种归零本身是没有意义的。换句话说,这样的结构是一个很好的例子,说明MqlTradeRequestMqlTradeResult 变量不应该 被归零。所以,如果你很渴望,请尝试正确地清除变量。如果出了问题,请详细描述什么是 "不工作"。

3.标准库有一个交易类"MQL5参考/ 标准库/ 交易类/ CTrade"。试着想一想如何在实践中应用它。在沉浸于语言的初始阶段,这门课可能已经很足够了。例如,这个类有以下方法:"MQL5参考/ 标准库/ 交易类/ 2CTrade/ PositionModify"。它的实施方式如下。

//+------------------------------------------------------------------+
//| 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.magic =m_magic;
   m_request.sl    =sl;
   m_request.tp    =tp;
//--- action and return the result
   return(OrderSend(m_request,m_result));
  }

其中的'ClearStructures();'一行 使用 清除了m_request变量。