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

 

这是专家本人--清理了不必要的东西--有很多的抨击:)

附加的文件:
 

我如何关闭一个订单?

我是这样打开它的。

mrequest.action = TRADE_ACTION_DEAL; // 立即执行

mrequest.price = NormalizeDouble(Ask,_Digits); // last Ask price

mrequest.sl = NormalizeDouble(Ask - 10000*_Point,_Digits); // 止损

要求。tp = 0; // 获利

mrequest.symbol = _Symbol; // 符号

要求。volume = Lots; // 交易的手数

要求。magic = 1; // Magic Number

mrequest.type = ORDER_TYPE_BUY; // 买入订单

mrequest.type_filling = ORDER_FILLING_FOK; //订单类型- 全部或没有

要求。偏差=100; //与当前价格相比的滑移量

OrderSend(mrequest,mresult)。

问题是我们有一个以上的未平仓订单,我们需要关闭一个选择性的订单。

 
Forex_Noob: 如何关闭一个订单?

问题是没有一个订单,而是有几个,我们需要选择性地关闭...

1.正确插入代码

2.如果在一个方向上开了几个订单,结果就是一个总的头寸。

3.要关闭一个未平仓的头寸,你应该发出相反方向的订单,其总量等于要关闭的头寸的数量。

4.如果有必要只关闭一部分头寸,那么就有必要暴露出具有相应总量的相反方向的订单。

 
Yedelkin:

1.正确插入代码

2.如果几个订单在同一方向开仓,结果就是一个总的头寸。

3.要关闭一个未平仓的头寸,你应该发出相反方向的订单,这些订单的总量等于要关闭的头寸的数量。

4.如果只有部分头寸需要平仓,那么就应该用相应的总量下相反的订单。

好的,谢谢。现在唯一的问题是,头寸并不总是使用平仓单来关闭...
 
Forex_Noob:
好的,谢谢。只是现在又出现了一个问题--平仓单并不总是平仓......。
看看日志--那里记录了结果。
 

叶德尔金,雷舍托夫

你好。

从一个指标中提取几对数据的最简单方法是什么?

string Currency1 = "GBPUSD";
string Currency2 = "EURUSD";
string Currency3 = "USDCHF";
string Currency4 = "USDJPY";
int ATRHandle;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
  for(int c=0;c<4;c++){
  SymbolSelect(Currency1,true);
  SymbolSelect(Currency2,true);
  SymbolSelect(Currency3,true);
  SymbolSelect(Currency4,true);
  }
  ATRHandle = iATR(Symbol(),PERIOD_M1,1);
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   IndicatorRelease(ATRHandle);
   Comment("");        
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//Например так,как показал
  }
//+------------------------------------------------------------------+
提前感谢。
 
mario065: 从一个指标中获取几个货币对的数据,最简单的方法/方式是什么?

这就是你的意思吗?

ATRHandle1 = iATR(Currency1,PERIOD_M1,1);
ATRHandle2 = iATR(Currency2,PERIOD_M1,1);
ATRHandle3 = iATR(Currency3,PERIOD_M1,1);
ATRHandle4 = iATR(Currency4,PERIOD_M1,1);
 
Yedelkin:

你是说这个?

你好。

当然不是。

如果有一只以上的火鸡,你必须为每只火鸡做一百次,因为有很多对吃。

一个处理程序,以便所有的对都被使用。

 
mario065: 如果有几个指标,对每一个指标都有必要做多少次对吃。一个处理程序可以使用所有的对。

所以你想有一个手柄,但iATR 指标对不同的字符起作用?

iATR 指标的描述中,你可以看到它被设计为只与一个符号一起工作因此,要处理4个字符,你需要运行4份iATR 指标。反过来,指标句柄是 访问特定指标副本的值所 必需的 ,如果你正在运行4个指标副本,你将不得不在某个地方存储相应的句柄。

如果只使用一个手柄的问题是本金,我们将不得不重写iATR 指标,使其同时与几个符号一起工作,有相应数量的值数组,等等。那么就有可能使用一个手柄

handle = myATR(Currency1,Currency2,Currency3,Currency4,PERIOD_M1,1);

并用它来寻址到myATR的这个或那个指标缓冲区

 

你也可以像这样写下来(示意图)。

string Currency[4] = {"GBPUSD","EURUSD","USDCHF","USDJPY"}; //могу ошибиться в части правильности записи присвоения значений, но проверить легко по Справочнику
int ATRHandle[4];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   for(int c=0;c<4;c++) SymbolSelect(Currency[с],true);
   for(int c=0;c<4;c++) ATRHandle[с] = iATR(Currency[с],PERIOD_M1,1);
   return(0);
  }