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

 
Vladimir Pavlov:

愚蠢地做了一个脚本,在电脑里面复制....,但没有复制!!

那么,错误描述在哪里呢?什么操作系统?MetaTrader 5的哪个版本?

你对该文件夹有写权限吗?


补充:看起来, 如果没有目录,需要先创建。


当复制到现有目录时--没有问题。MetaTrader 5将没有错误地工作。

 

我怎样才能确定给定id的 头寸已经关闭?

明显的解决方案是--当PositionSelectByTicket返回false时,但这可能发生在连接到交易账户时,未结头寸 还没有时间加载到终端的情况下?

一个稍微复杂的解决方案--PositionSelectByTicket返回false,HistorySelectByPosition返回true。在这种情况下,如果这个职位的历史记录被加载,那么必须加载开放职位列表。

Совершение сделок - Торговые операции - MetaTrader 5
Совершение сделок - Торговые операции - MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
. ... Rick D. ... .:

等待终端同步。例如,虽然(HistorySelect)。

 
fxsaber:

等待终端同步。例如,虽然(HistorySelect)。

我不是终端机内部工作的专家。但可能需要的是,当OnInit出现时,未结头寸 表(可能还有交易历史)已经被加载了?

 
. ... Rick D. ... .:

我不是终端内部工作的专家。

也远远不是一个专家。只是脑海中一下子浮现出好几个选项,让人忍不住想去尝试。而什么是有效的,将不得不进行实验。

 
Vladimir Karputov:

最简单的解决方案:在MetaTrader中打开一个所需金融工具的图表,并将专家顾问放在上面。

这一点是众所周知的。但我不知道如何在程序中设置这一对?是否有这方面的功能?
 
cepreu1:
这一点是众所周知的。但我想知道如何在应用程序中设置这一对?是否有这方面的功能?

很容易。

例如,贸易业务。见CTrade 交易类,买入 方法。

bool  Buy( 
   double        volume,          // объем позиции 
   const string  symbol=NULL,     // символ 
   double        price=0.0,       // цена исполнения 
   double        sl=0.0,          // цена Stop Loss 
   double        tp=0.0,          // цена Take Profit 
   const string  comment=""       // комментарий 
   )

我已经强调了你可以指定所需符号 的地方。


或例如接收有关开盘价和收盘价的数据......。-CopyRates:

int  CopyRates( 
   string           symbol_name,       // имя символа 
   ENUM_TIMEFRAMES  timeframe,         // период 
   int              start_pos,         // откуда начнем  
   int              count,             // сколько копируем 
   MqlRates         rates_array[]      // массив, куда будут скопированы данные 
   );
 
Vladimir Karputov:

很容易。

例如,贸易业务。见CTrade 交易类,买入 方法。

我已经强调了你可以指定所需符号 的地方。


或例如接收有关开盘价和收盘价的数据......。-CopyRates:

是的,好的。但我还没有指定要在启动时分配一对,但

不开仓。而买入是通过开仓来实现的。

CopyRates 给出了该对货币的历史数据,但没有指定。

 
cepreu1:

是的,好的。但我没有说明我想在启动时指定一对夫妇,但

不开仓。而买入是通过开仓来实现的。

CopyRates 提供的是一对的历史数据,没有指定。

你说得太花哨了,但我试着猜一下:你需要一个带有符号名称的输入参数?然后这里是代码--你在"InpSymbol"参数中指定所需的符号。这个符号在OnInit()中被检查 - 如果没有这样的符号,那么专家顾问将被卸载,并在终端的 "专家 "标签(或策略测试器的 "日志 "标签)中出现错误信息。

//+------------------------------------------------------------------+
//|                                                   Set Symbol.mq5 |
//|                              Copyright © 2018, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2018, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.000"
//---
#include <Trade\SymbolInfo.mqh>  
CSymbolInfo    m_symbol;                     // symbol info object
//--- input parameters
input string   InpSymbol="ASDWER";
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   if(!m_symbol.Name(InpSymbol)) // sets symbol name
      return(INIT_FAILED);
   RefreshRates();
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(!RefreshRates())
      return;
   string text=m_symbol.Name()+"\n"+
               "Ask "+DoubleToString(m_symbol.Ask(),m_symbol.Digits())+"\n"+
               "Bid "+DoubleToString(m_symbol.Bid(),m_symbol.Digits());
   Comment(text);

  }
//+------------------------------------------------------------------+
//| Refreshes the symbol quotes data                                 |
//+------------------------------------------------------------------+
bool RefreshRates(void)
  {
//--- refresh rates
   if(!m_symbol.RefreshRates())
     {
      Print("RefreshRates error");
      return(false);
     }
//--- protection against the return value of "zero"
   if(m_symbol.Ask()==0 || m_symbol.Bid()==0)
      return(false);
//---
   return(true);
  }
//+------------------------------------------------------------------+

如果"InpSymbol"参数中指定的符号存在,那么图表上将显示以下信息

  • 符号名称
  • 询问价格
  • 投标价格


以下是它的工作原理:我们在欧元兑美元上启动它,并在设置中指定美元兑日元的符号。因此,它与欧元兑美元符号一起工作,但数据(价格)来自美元兑日元


附加的文件:
 
Vladimir Karputov:

你说得有点夸张,但让我猜猜:你需要一个带有符号名称的输入参数?然后这里是代码 - 你在"InpSymbol"参数中指定所需的符号。这个符号在OnInit()中被检查 - 如果没有这样的符号,那么专家顾问将被卸载,并在终端的 "专家 "标签(或策略测试器的 "日志 "标签)中出现错误信息。

如果"InpSymbol"参数中指定的符号存在,那么图表上将显示以下信息

  • 符号名称
  • 询问价格
  • 投标价格


以下是它的工作原理:我们在欧元兑美元上启动它,并在设置中指定美元兑日元符号。因此,它似乎与欧元兑美元符号一起工作,但信息(价格)是从美国符号接收的

弗拉基米尔-卡尔普托夫

你说得太浮夸了,但让我猜猜看:你需要一个带有符号名称的输入参数?然后这里是代码--你在"InpSymbol"参数中指定所需的符号。这个符号在OnInit()中被检查 - 如果没有这样的符号,那么专家顾问将被卸载,并在终端的 "专家 "标签(或策略测试器的 "日志 "标签)中出现错误信息。

如果"InpSymbol"参数中指定的符号存在,那么图表上将显示以下信息

  • 符号名称
  • 询问价格
  • 投标价格


以下是它的工作原理:我们在欧元兑美元上启动它,并在设置中指定美元兑日元符号。因此,事实证明,它与欧元兑美元符号一起工作,但从美元兑日元符号中接收信息(价格)。


是的,但在这个例子中,专家顾问在欧元兑美元上运行,但信息(价格)是从USDJPY符号中获得的。

为什么要把事情复杂化,我的意思是,如果我们以这个例子为例,然后我们在欧元兑美元(或任何其他货币)上启动专家顾问。

需要的货币对)就这样,我们观察这对组合,然后,如果有必要,我们开立一个头寸。