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

 
Vitaly Muzichenko:

好吧,我去找一个有4K的mon。

这张照片是哪里来的?

 
Alexey Viktorov:

这张照片是哪里来的?

从4K发送

 
Vitaly Muzichenko:

用4K发送

好吧,我想你可以再检查一下吗?还是没有?

 
Alexey Viktorov:

好吧,我想你可以再检查一下吗?还是没有?

不可取)

 
如何在代码中获得由property# version 定义的MQL5程序版本的值?
 
leonerd:
如何获得由property# version 定义的MQL5程序版本的值?

事实证明,你不能这样做,因为在预定义的宏替换

恒定

描述

日期_______。

编译文件的日期,不含时间(小时、分钟和秒为0)。

日期__DATETIME__

文件被编译的日期和时间

线 条

宏所在的源代码中的行数

文件编号:__FILE__

被编译的文件的名称

适宜人群

当前编译文件的绝对路径

基金会__FUNCTION__

宏所在的函数的名称

_FUNCSIG__

宏所在的主体中的函数签名。 带有参数类型的函数描述在识别重载函数 时非常有用

__mqlbuild__, __mql5build__

编译器构建的编号


没有这样的变量

Документация по MQL5: Константы, перечисления и структуры / Именованные константы / Предопределенные макроподстановки
Документация по MQL5: Константы, перечисления и структуры / Именованные константы / Предопределенные макроподстановки
  • www.mql5.com
//| Expert initialization function                                   | //| Expert deinitialization function                                 | //| Expert tick function                                             | //| test1                                                            |...
 
leonerd:
如何获得由property# version 定义的MQL5程序版本的值?

我使用这个,我找不到任何其他的选择。你需要指定两次版本,但这并不难

#property version     "23.25" // 16.04.2020
#define   version     "23.25"
 

日安,亲爱的专家们。

你能告诉我,在代码中哪里有一个错误,阻止在同一根柱子上用已经关闭了前一个头寸的SELL打开BUY头寸?

规则很简单(要学习)。
1 进场 - 慢速指标越过0+快速也在区域内(买/卖)。

2 出口--通过快速指示器穿越 0

//+------------------------------------------------------------------+
//|                                                      TestDPO.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#include <Trade\Trade.mqh>
CTrade trade;

input int dpo_fast_period = 9;  // DPO Fast Period
input int dpo_slow_period = 40; // DPO Fast Period
input int magic = 1000;         // Magic советника
input ulong slippage = 10;         // Проскальзывание цены
input double volume = 0.1;      // размер позиции

int DPO_fast;                 // Хэндл для быстрого DPO
int DPO_slow;                 // Хэндл для медленного DPO


double fDPOVal[];                 //Динамический массив для хранения значений fast DPO
double sDPOVal[];                 //Динамический массив для хранения значений slow DPO

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {



   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---------------Задаем цены покупки и продажи------------------------
   double Ask=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
   double Bid=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);

   int signal=0;  // сигнал на покупку, продажу

//--------------Проверка на новый бар
   if(!isNewBar())
      return;
//--------------------------------------------------------------------

   DPO_fast=iCustom(NULL,0,"Examples\\DPO",dpo_fast_period);   // получаем хэндлы для быстрого
   DPO_slow=iCustom(NULL,0,"Examples\\DPO",dpo_slow_period); // получаем хэндлы для медленного


   ArraySetAsSeries(fDPOVal,true);              //задаем направление индексов массива
   ArraySetAsSeries(sDPOVal,true);
   if(CopyBuffer(DPO_fast,0,0,10,fDPOVal)<0)    // наполняем массив значений DPO fast
     {
      Alert("Ошибка копирования буфера индикатора fast DPO. Ошибка ", GetLastError());
     }
   if(CopyBuffer(DPO_slow,0,0,10,sDPOVal)<0)    // наполняем массив значений DPO slow
     {
      Alert("Ошибка копирования буфера индикатора slow DPO. Ошибка ", GetLastError());
     }

   double DPO_fast_c_value=NormalizeDouble(fDPOVal[1],6);  // запоминаем значение индикатора DPO fast на предыдущем баре
   double DPO_slow_c_value=NormalizeDouble(sDPOVal[1],6);  // запоминаем значение индикатора DPO slow на предыдущем баре
   double DPO_fast_p_value=NormalizeDouble(fDPOVal[2],6);  // запоминаем значение индикатора DPO fast на пред-предыдущем баре
   double DPO_slow_p_value=NormalizeDouble(sDPOVal[2],6);  // запоминаем значение индикатора DPO slow на пред-предыдущем баре

   if(DPO_slow_c_value>0 && DPO_slow_p_value<0 && DPO_fast_c_value>0)  // если медленный индикатор пересекает 0 снизу вверх и быстрый находится выше 0
      signal=1;                                                           // сигнал на открытие покупки
   if(DPO_slow_c_value<0 && DPO_slow_p_value>0 && DPO_fast_c_value<0)  // если медленный индикатор пересекает 0 сверху вниз и быстрый находится ниже 0
      signal=-1;                                                          // сигнал на открытие продажи
   if(DPO_fast_c_value>0 && DPO_fast_p_value<0)                       // если быстрый индикатор пересекает 0 снизу вверх
      signal=-2;                                                           // сигнал на закрытие продажи
   if(DPO_fast_c_value<0 && DPO_fast_p_value>0)                       // если быстрый индикатор пересекает 0 сверху вниз
      signal=2;                                                          // сигнал на закрытие покупки

switch (signal)
         {
         case -1:
         trade.Sell(volume,NULL,Bid,0,0,NULL);
         break;
         case 1:
         trade.Buy(volume,NULL,Ask,0,0,NULL);
         break;
         case -2:
         trade.PositionClose(_Symbol,slippage);
         break;
         case 2:
         trade.PositionClose(_Symbol,slippage);
         break;
	}
  }
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
Задавайте вопросы по техническому анализу, обсуждайте торговые системы и улучшайте свои навыки программирования торговых стратегий на языке MQL5. Общайтесь и обменивайтесь опытом на форуме с трейдерами всего мира и помогайте ответами новичкам — наше сообщество развивается вместе с вами. Как я собираю себе советника методом тыка Из этих...
 
Andrey.Sabitov:

尊敬的专家们,下午好。

你能告诉我,代码中哪里出现了错误,导致无法在同一根柱子上用关闭了前一个头寸的SELL打开BUY头寸?

规则很简单(要学习)。
1 进场 - 慢速指标越过0+快速也在区域内(买/卖)。

2 退出 - 快速指示器越过0线

所有的工作都是正确的:慢速指标 0线的开放条件,只有快速指标在指定的地方越过了0线。

必须添加一个条件,在指定位置开仓,慢速在同一区域,快速越过0线

 
Andrey.Sabitov:

日安,亲爱的专家们。

你能告诉我,代码中哪里有错误,使 "买 "的头寸不能与 "卖 "的头寸在同一个柱子上打开,而 "卖 "的头寸已经关闭了。

规则很简单(要学习)。
1 进场 - 慢速指标越过0+快速也在区域内(买入/卖出)。

2 出口--通过快速指示器穿越 0

你正在犯一个严重的错误:你正在为每一个点击 创建两个INLIKERS。

//--------------------------------------------------------------------

   DPO_fast=iCustom(NULL,0,"Examples\\DPO",dpo_fast_period);   // получаем хэндлы для быстрого
   DPO_slow=iCustom(NULL,0,"Examples\\DPO",dpo_slow_period); // получаем хэндлы для медленного

指标句柄必须在OnInit时被创建一次。


请阅读iCustom 帮助。

Основы тестирования в MetaTrader 5
Основы тестирования в MetaTrader 5
  • www.mql5.com
Идея автоматической торговли привлекательна тем, что торговый робот может без устали работать 24 часа в сутки и семь дней в неделю. Робот не знает усталости, сомнений и страха,  ему не ведомы психологические проблемы. Достаточно четко формализовать торговые правила и реализовать их в виде алгоритмов, и робот готов неустанно трудиться. Но прежде...
原因: