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

 
Sprut112:
该EA以对冲方式进行交易。也许应该增加一些检查作为标准?

你是否在一个美分账户上测试过?在一些美分账户中,最低手数为0.1手。

 
Konstantin Nikitin:

我在测试器中正常交易,构建1960。我放了多少,这就是同时对12对的需要。

为什么16号是0.01手?
 
Konstantin Nikitin:

你是否在一个美分账户上测试?在一些美分账户中,最低手数为0.1手。

不,有对最小最大和批量增量的检查
 
Sprut112:
为什么是16号地段0.01?

如果你指的是我的照片,那是专家的部分封闭起了作用。它说接近。

Sprut112:
不,检查最小最大和批量增量。
因此,也许这个检查会寻找一个大于当前的最小值并将其替换掉。
 
Konstantin Nikitin:

如果你指的是我的照片,那是专家的部分封闭起了作用。它确实说过接近

因此,也许这个检查会寻找一个大于当前的最小值并将其替换掉。
我们可以这样想。在测试器中,它不会立即发生,大约一个月后才会发生
 
Artyom Trishkin:

为什么你的代码在有#property strict的mql4中不能如你所愿?

与弗拉基米尔给你看的代码有什么根本区别。

而这些实现方式没有任何区别。而你的代码没有输出文本描述的原因只有一个--那就是mql4代码中没有#property strict。


我没有马上想明白,还以为因为没有=0、=1等而对我不起作用...。

enum MySymbol
     {
      symbol_0=0,// AUDUSD
      symbol_1=1,// NZDUSD
      symbol_2=2,// USDCAD
      symbol_3=3,// USDCHF
      symbol_4=4,// USDJPY
      symbol_5=5,// EURJPY
      symbol_6=6,// EURUSD
      symbol_7=7,// GBPUSD
      symbol_8=8,// #CL
     };

但结果是同样的事情......

string xx=EnumToString(Symboll_(1)); //结果 symbol_1

我应该得到的是NZDUSD

  в таком варианте всё Ок но не получается добавить символ с решёткой #CL
enum  Symboll_
  {
   AUDUSD,
   NZDUSD,
   USDCAD
   //#CL
  };
string xx=EnumToString(Symboll_(1)); // результат NZDUSD

但阵列变体正是我所需要的......

 
xxz:

我没有马上明白,还以为我失败了,因为我没有=0、=1等。

但结果是同样的事情......

string xx=EnumToString(Symboll_(1)); // 结果 symbol_1

我应该得到的是NZDUSD

但这个阵列变体正是我所需要的......

当然,当通过EnumToString()输出一个枚举时,你不会得到"//"后面的变量描述,而是变量本身的情况。

为了以你想要的方式打印枚举,你需要做一个类似于EnumToString()的函数,它将打印它。

对于这样的一个枚举。

enum ENUM_SYMBOL_NAMES
  {
   SYMBOL_NAME_AUDUSD,     // AUDUSD
   SYMBOL_NAME_NZDUSD,     // NZDUSD
   SYMBOL_NAME_USDCAD,     // USDCAD
   SYMBOL_NAME_USDCHF,     // USDCHF
   SYMBOL_NAME_USDJPY,     // USDJPY
   SYMBOL_NAME_EURJPY,     // EURJPY
   SYMBOL_NAME_EURUSD,     // EURUSD
   SYMBOL_NAME_GBPUSD,     // GBPUSD
   SYMBOL_NAME_SHARP_CL,   // #CL
  };
input ENUM_SYMBOL_NAMES InpNames; // Instrument

像这样。

//+------------------------------------------------------------------+
string InstrumentToString(void)
  {
   string enm=EnumToString(InpNames);
   int index=StringFind(enm,"SHARP_");
   int shift=(index>WRONG_VALUE ? index+6 : 12);
   string name=StringSubstr(enm,shift);
   return(index>0 ? "#"+name : name);
  }
//+------------------------------------------------------------------+

并打电话。

Print(InstrumentToString());
 
double get_lot(int pair, double input_lots) {
   if(input_lots<min_lot[pair]) return(min_lot[ir]);
   return(input_lots);
 
Konstantin Nikitin


:

如果你指的是我的照片,那是专家的部分封闭起了作用。它说接近。

因此,也许这个检查会看一下最小值是否大于当前值,并将其替换。
 if(SymbolInfoDouble(Symb,SYMBOL_VOLUME_STEP)<0.1) dg=2; else
      if(SymbolInfoDouble(Symb,SYMBOL_VOLUME_STEP)<1.0) dg=1;

我认为这是不对的。

 
Vladimir Karputov:

更好的是,明确说明你想要实现的目标。我可能会给你一个完整的例子。

很久以前,早在2010年,在冬天。我还要求在一个指标中进行过滤,其本质是:用PERIOD_MN1 绘制iBars的Mach & Min HLine....))))。

我自己想出了这个办法。掌握了MT4。

慢慢地,而不是立即,我正在掌握MT5。

...."清楚地说明你想得到什么 "公式:我正在转换(自己)我编程的东西,同时我正在掌握(自己)MT5 ))))


但是你用例子向我展示的东西(视觉上)并没有消失。


如果是这样,我就回去了。)

如果是SHO,我就回去






 
Artyom Trishkin:

自然地,当使用EnumToString()打印出一个枚举时,你不会得到一个 在"//"后面的变量描述,而是得到变量本身的原貌。

为了以你想要的方式打印出来,你需要制作一个类似于EnumToString()的函数,将其打印出来。


这就是问题所在,因为要解决最简单的任务,你必须创建一个函数,而这是一堆无人需要的代码。

而不是一行十行的...

我想尽可能的简洁!...

我原本可以通过在代码中添加一行来解决这个问题

            xx=iClose(Symbol_(i),0,50);
xx=iClose("#CL",0,50);

但我不喜欢它,只是因为代码中多了一行......

我不喜欢 "肮脏 "的代码...