来自一个 "傻瓜 "的问题 - 页 243

 
paladin800:
ArrayResize(Buf, rates_total)。

也要这样做,那么至少不会有错误。

int start=10;

而它将在欧元M1上画出一条直线=0,014。

 

下午好。

有一个代码,由于某些原因不能工作。

m_symbol.Ask()方法中的价格返回0。

严厉地判断代码。我只是在学习。准备听取任何充分的批评意见。

而目的是开设一个职位的事实。数量还不多(容易实现)。

//+------------------------------------------------------------------+
//|                                                        probe.mq5 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      ""
#property version   "1.00"
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
input int    perMA1=3;
input int    perMA2=7;
input double DifMANeed=0;
input double InpLots=0.1;
double DifMAN=0;

CTrade m_trade;
CSymbolInfo m_symbol;

class MATest{
private:
   int MA1;    //First MA
   int MA2;    //Two MA
   
public:
   double DifMA;  //Diference of MA
   bool TradeAllowed();     
};
bool MATest::TradeAllowed(){
   MA1=iMA(NULL,0,perMA1,0,MODE_SMA,PRICE_CLOSE);
   MA2=iMA(NULL,0,perMA2,0,MODE_SMA,PRICE_CLOSE);
   double price=m_symbol.Ask();
   m_trade.SetDeviationInPoints(5);
   DifMA=MathAbs(MA1-MA2);
   Print(price);
   if(DifMA>DifMAN){
      if(MA1>MA2){
        if(m_trade.PositionOpen(Symbol(),ORDER_TYPE_SELL,InpLots,m_symbol.Ask(),0,0)){
            Print("Open Sell");
        }
        else Print("Cant not open Sell");
      }
      if(MA1<MA2){
        if(m_trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,InpLots,m_symbol.Bid(),0,0)){
            Print("Open Buy");
        }
        else Print("Cant not open Buy",m_symbol.Name(),m_symbol.Bid());
      
      }
      return(true);
   }
   else return(false);
};

MATest g_trade;

int OnInit()
  {
//---
   string symb=Symbol();
   m_symbol.Name(symb);
   
   Alert(m_symbol.Name()," ",NormalizeDouble(m_symbol.Bid(),m_symbol.Digits()));
   double close_array[];
      CopyClose(NULL,0,1,200,close_array);
   double high_array[];
      CopyHigh(NULL,0,1,200,high_array);
   double low_array[];
      CopyLow(NULL,0,1,200,low_array);
   double volant;
   for(int i=ArraySize(close_array);i<0;i--){
         volant+=(close_array[i]+high_array[i]+low_array[i])/3;
         volant=volant/ArraySize(close_array);
      }
   if(DifMANeed==0||DifMANeed>volant){
      DifMAN=volant;
   }
   
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(g_trade.TradeAllowed())Comment(g_trade.DifMA,"  Trade Allowed");
   else Comment(g_trade.DifMA," Trade Not Allowed");
  }
//+------------------------------------------------------------------+
 
panker:

下午好。

有一个代码,由于某些原因不能工作。

m_symbol.Ask()方法中的价格返回0。

严厉地判断代码。我只是在学习。准备听取任何充分的批评意见。

而目的是开设一个职位的事实。数量还不多(容易实现)。

也许你缺少一个函数,像SymbolSelect这样的东西。

在这种情况下,它是一个命令名称

https://www.mql5.com/ru/docs/standardlibrary/tradeclasses/csymbolinfo/csymbolinfoask - 见注释

Документация по MQL5: Стандартная библиотека / Торговые классы / CSymbolInfo / Ask
Документация по MQL5: Стандартная библиотека / Торговые классы / CSymbolInfo / Ask
  • www.mql5.com
Стандартная библиотека / Торговые классы / CSymbolInfo / Ask - Документация по MQL5
 
Документация по MQL5: Стандартная библиотека / Торговые классы / CSymbolInfo / RefreshRates
Документация по MQL5: Стандартная библиотека / Торговые классы / CSymbolInfo / RefreshRates
  • www.mql5.com
Стандартная библиотека / Торговые классы / CSymbolInfo / RefreshRates - Документация по MQL5
 
panker: 有一些代码由于某种原因而不能工作。m_symbol.Ask()方法中的价格返回0。
看一下库的实现本身。Ask()方法愚蠢地返回m_tick.ask值。RefreshRates()方法用于刷新m_tick值。)
 

谁能给出一个代码例子。

如何创建一个 "小数点滚动条"?

我使用了MQL5类CScroll。https://www.mql5.com/en/docs/standardlibrary/controls/cscroll

Documentation on MQL5: Standard Library / Classes for Control Panels and Dialogs / CScroll
Documentation on MQL5: Standard Library / Classes for Control Panels and Dialogs / CScroll
  • www.mql5.com
Standard Library / Classes for Control Panels and Dialogs / CScroll - Documentation on MQL5
 
如果我没记错的话,OnDeinit()函数有2.5秒的执行时间。问题1:如果在这段时间内不是所有的指标手柄都是自由的,会发生什么?问题2:OnInit()有时间限制吗?
 
paladin800:

如果我没记错的话,OnDeinit()函数需要2.5秒来执行。

问题1:如果在这段时间内没有释放所有的指标手柄,会发生什么?

在MT5中,指标句柄是一个单独的话题,因为它们的释放与其说是由专家顾问本身控制的(它只能发送一个不需要它们的消息并重置句柄值),不如说是由终端本身控制的(它最终决定是否完全删除整个指标句柄)。


问题2:OnInit()有时间限制吗?

 

你能告诉我每年的 "利润走廊 "应该是多少吗?(в %%)

附加的文件:
12.png  45 kb
 
我正在编写一个多货币专家顾问,在输入参数中,我设置了工具名称,如字符串 Symbol0="EURUSD"。如果我写错了名字,交易就不会进行。问题:是否有这样一个功能,可以将工具名称与经纪人提供的工具进行比较?
Документация по MQL5: Основы языка / Типы данных / Тип string
Документация по MQL5: Основы языка / Типы данных / Тип string
  • www.mql5.com
Основы языка / Типы данных / Тип string - Документация по MQL5