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

 
lego9955 错误处理 更正确了。谢谢!

为了以防万一,如我所示,将它们写成一行比写成数组更容易。

 
Alexey Petrov #:

你好

请尝试在市场上搜索现成的解决方案 -https://www.mql5.com/fr/search#!keyword=money%20management&module=mql5_module_market

您也可以向自由职业者订购定制解决方案 -https://www.mql5.com/fr/job

您好,感谢您的回复。 我已经创建了一个符合我期望的脚本,但不幸的是,仍有两个错误我无法理解或纠正。 您知道该联系谁来寻求一点帮助吗? 这只是两行代码,在编译后注册为错误...
 
新年快乐MT5 10 和 MT5 11 哪个窗口更好?AMD 5900X 笔记本电脑
 

大家好,新年快乐!您能告诉我:如何才能让我的脚本使用市场上的指标?

更具体地说:
市场上有一个指标 "自动趋势线"。我想在此基础上制作一个机器人,当价格穿过指标上的这些线时(以及在指定的附加条件下),机器人就会开仓或平仓。

 
Rad89 #:

大家好,新年快乐!您能告诉我:如何才能让我的脚本使用市场上的指标?

更具体地说:
市场上有一个指标 "自动趋势线"。我想在此基础上制作一个机器人,当价格穿过指标上的这些线时(以及在指定的附加条件下),机器人就会开仓或平仓。

我自己没问题。对于市场或 CodeBase,您不能使用市场上其他人的工艺品......

 
Alexey Viktorov #:

自己用,没问题。您不能使用市场或 CodeBase 上别人的手工艺品...

自己用我不知道怎么做。我在开放源代码中找不到代码。也不知道如何在我的代码中拧上螺丝,让它捕捉到行的位置。

 

你好,@Rad89

您需要iCustom()CopyBuffer() 函数。

下面是将从市场下载的指标添加到智能交易系统的示例

// Глобальная переменная для хендла индикатора
int tlHandle;

int OnInit() {
   // Создаем хендл индикатора
   tlHandle = iCustom(Symbol(), PERIOD_CURRENT, "Market\\Automatic Trendlines", false, 5, 15, clrRed, clrBlue, 2, "My Support", "My Resistance");
   
   // Можем добавить индикатор на график, если хотим. 
   // Для использования в расчетах это необязательно
   ChartIndicatorAdd(ChartID(), 0, tlHandle);

   // Вызовем один раз OnTick(), чтобы на выходных у нас что-то в логе отобразилось
   OnTick(); 
   
   return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason) {}

void OnTick() {
   // Объявляем массивы для буферов индикатора
   double tlBuffer0[], tlBuffer1[]; // ,tlBuffer1, ...
   
   int res;
   
   // Копируем нужное количество значений из индикаторных буферов в массивы
   res = CopyBuffer(tlHandle, 0, 0, 100, tlBuffer0);
   res = CopyBuffer(tlHandle, 1, 0, 100, tlBuffer1);
   
   // У разных индикаторов различное количество индикаторных буферов, 
   // числа из которых используются для построения линий, значков, цветовых меток на графике
   // Сколько их у данного индикатора и как используются их числа исследуйте самостоятельно
   
   // res = CopyBuffer(tlHandle, 2, 0, 100, tlBuffer2);
   
   // Пользуемся полученными значениями
   ArrayPrint(tlBuffer0);
   ArrayPrint(tlBuffer1);
}
Документация по MQL5: Технические индикаторы / iCustom
Документация по MQL5: Технические индикаторы / iCustom
  • www.mql5.com
iCustom - Технические индикаторы - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
你好。有一个枚举。
enum ENUM_NAME
  {
   ENUM_1,
   ENUM_jsdf
   ....
   ENUM_FEF;   
  };
如何为 E_NAME[] 数组分配内存,以便有足够的内存容纳所有可能的 ENUM_NAME 值(不重复)?
ENUM_NAME     E_NAME[];

并用所有可能的值初始化E_ INAME[]?

 

你好,@pivomoe

如果您不打算强制为枚举项赋值(从示例来看不会),您可以这样做:

// Объявляем перечисление
enum ENUM_NAME {
   ENAME_1,
   ENAME_JSDF,
   ENAME_ERT,
   ENAME_QWERTY,
   ENAME_FEF
};

// Обявляем константу, хранящую количество элементов перечисления
#define  ENUM_NAME_SIZE 5

// Массив для хранения элементов перечисления
ENUM_NAME     E_NAME[ENUM_NAME_SIZE];

int OnInit() {
   // Заполняем массив значениями, преобразуя к типу ENUM_NAME
   for(int i = 0; i < ENUM_NAME_SIZE; i++) {
      E_NAME[i] = (ENUM_NAME) i;
   }

   // Пользуемся массивом
   ArrayPrint(E_NAME);
   
   for(int i = 0; i < ENUM_NAME_SIZE; i++) {
      Print(EnumToString(E_NAME[i]));
   }
   
   return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason) {}

在这种情况下,当向枚举中添加元素时,您还需要更改存储元素个数的常量。

此外,最好只在枚举本身的名称中使用ENUM_ 前缀,而在其元素中使用其他前缀。在所有标准的 MQL 枚举中都使用了这一约定。

 
Yuriy Bykov #:

你好,@pivomoe

如果您不强制为枚举项赋值(根据示例判断--不会),您可以这样做:

在这种情况下,当向枚举中添加项时,您还需要更改存储项数的常量。

另外,最好只在枚举本身的名称中使用ENUM_ 前缀,而在其元素中使用其他前缀。所有标准的 MQL 枚举都使用了这种约定。

感谢您的帮助。我使用 ENUM 已经很多年了,我甚至都没有想到要阅读帮助。