外汇交易中符号名称的最大长度 - 页 8

 
fxsaber:

事实上,这是一种敲打。由于有可能不等待交易被追踪。唯一非替代性的onTradeTransaction是如果订单被拒绝。例如,如果没有足够的钱。


事实证明,我们做了一百个Async-transactions,用适当的法师和请求者填充数组(列表)。一旦OnTradeTransaction收到了对任务的响应,我们就把该元素从列表中删除。一旦我们看到活人/死人中的名单上有一个大人物被突出显示,我们就把这个条目删除。这就是或多或少实现控制的方式。你弄清楚了吗?


你仍然可以使用其他字段--SL/TP、评论--而不是魔法。

是的,正是这样。OnTradeTransaction 从未被禁用,只是定期调用检查函数(如果OnTradeTransaction未被触发)。一旦检测到与订单有关的一切,标志就会被重置。

我如何将评论作为SL/TP使用?

 
fxsaber:

当你可以在每一个On-stream上检查时,为什么还要等待?

因为在我的策略中,重要的是OnTradeTransaction 中的内容。

我不使用On-puke :)

添加

如果事件发生在OnTradeTransaction,那么一切都会被重置,所以不会 有任何障碍。

 
prostotrader:

如何使用评论员ronyatno,但作为SL/TP?

以上补充了...

你设置假的SL,你需要的信息就储存在这个值里。例如,我就是这样在MT4中存储一个头寸的开盘价,它是通过限制器获取的。

 
prostotrader:

因为在我的策略中,OnTradeTransaction 中的具体内容很重要。

所以一定要在OnTradeTransaction中直接检查魔法。我会这样做的。


总的来说,将Megics作为申请的替代方案的想法很好。

 
fxsaber:

以上补充了...

你设置一个假的SL,在其值中存储你需要的信息。例如,我就是这样在MT4中存储了一个头寸的开盘价,该头寸 是通过限价开关成交的。

有没有可能在没有头寸的情况下设置SL?

 
prostotrader:

如果没有头寸,是否有可能暴露SL?

对于减价,可能无法做到这一点。我只通过限价单进行交易已经有很长一段时间了。

 
fxsaber:

对市场来说,可能不可能做到这一点。长期以来,我只通过限价单进行交易。

"这样存储信息有点奇怪。嗯,是的,你应该知道。

由于我对外汇市场 根本不感兴趣,一张图表上的6个符号名称和65365个标签已经足够满足我的需要。

此外,我每个交易日只能进行2000次交易。

 
prostotrader:

由于我对外汇市场 一点也不感兴趣,一张图表上的6个字符的符号名称和65365个莫吉克就足以满足我的需要。

此外,我在一个交易日只能进行2000次交易。

这与外汇无关。而OnTradeTransaction也有同样的问题。因此,一个普遍的解决方案

#include <crc64.mqh> // https://www.mql5.com/en/blogs/post/683577

string GetMagicString()
{
  return(MQLInfoString(MQL_PROGRAM_PATH/*MQL_PROGRAM_NAME*/) + _Symbol + (string)ChartID()/* + (string)_Period*/);
}

// Формирует мэджик с изменяемой частью ReserveBits для прописывания туда Num-значения
ulong GetMagic( const int Num = 0, const int ReserveBits = 12 )
{
  uchar Bytes[];
  
  return((crc64(0, Bytes, (StringToCharArray(GetMagicString(), Bytes))) << ReserveBits) + (Num % (1 << ReserveBits)));
}

// Определяет, свой ли исходный мэджик с изменяемой частью ReserveBits
bool IsMyMagic( const ulong Magic, const int ReserveBits = 12 )
{
  return(GetMagic(0, ReserveBits) >> ReserveBits == Magic >> ReserveBits);
}

#define  PRINT(A) Print(#A + " = " + (string)(A))

void OnStart()
{  
  for (int i = 0; i < 10; i++)
  {
    PRINT(GetMagic(i));
    PRINT(IsMyMagic(GetMagic(i)));
  }
  
  PRINT(IsMyMagic(MathRand()));
}
 

当然,事件模型在这种情况下是不方便的。例如,如果你想在不退出On-function的情况下进行Async操作,并从中获得结果。

现在有可能通过拐杖释放这种行为。

  1. 我们用OnTradeTransaction 编写一个指标(没有缓冲区和输入变量),将所有交易写在一个公共场所(例如,在一个资源中)。
  2. 专家顾问通过iCustom创建这个指标。
  3. 在任何执行地点,专家顾问都可以查看由指标写入的所有传入交易。

这使我们有很大的灵活性。

例如,我们可以发送一百个Async指令,等待它们的执行,而不需要走出程序的最深处,然后继续执行我们的代码。


我们谈论的当然是请求。而魔法主题与此无关。


尽管对于开发者来说,将事务写到一个可公开访问的数组中是有意义的。没有指标。

 
fxsaber:

这与外汇无关。而OnTradeTransaction也有同样的问题。因此,一个普遍的解决方案。

尽管不进行位操作也是可以的(甚至更好)--只需crc64 + Num
2018.08.25 22:10:48.913 Test (BR-9.18,M1)       1749671450686091264
2018.08.25 22:10:48.914 Test (BR-9.18,M1)       1749671450686091265
2018.08.25 22:10:48.914 Test (BR-9.18,M1)       1749671450686091264
2018.08.25 22:10:48.914 Test (BR-9.18,M1)       1749671450686091265
2018.08.25 22:10:48.914 Test (BR-9.18,M1)       1749671450686091264
2018.08.25 22:10:48.914 Test (BR-9.18,M1)       1749671450686091265
2018.08.25 22:10:48.914 Test (BR-9.18,M1)       1749671450686091264
2018.08.25 22:10:48.914 Test (BR-9.18,M1)       1749671450686091265
2018.08.25 22:10:48.914 Test (BR-9.18,M1)       1749671450686091272
2018.08.25 22:10:48.914 Test (BR-9.18,M1)       1749671450686091273

有一些巧合...