Preguntas de un "tonto" - página 243

 
paladin800:
Do ArrayResize(Buf, rates_total);

También haga esto, entonces al menos no habrá ningún error.

int start=10;

Y dibujará una línea recta=0,014 en el Euro M1.

 

Buenas tardes.

Hay un código que por alguna razón no funciona.

El precio en el método m_symbol.Ask() devuelve 0.

Juzga el código con dureza. Sólo estoy aprendiendo. Dispuesto a escuchar cualquier crítica adecuada.

Mientras que para el propósito fue el hecho de la apertura de una posición. Qty aún no es interesante (fácil de implementar).

//+------------------------------------------------------------------+
//|                                                        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:

Buenas tardes.

Hay un código que por alguna razón no funciona.

El precio en el método m_symbol.Ask() devuelve 0.

Juzga el código con dureza. Sólo estoy aprendiendo. Dispuesto a escuchar cualquier crítica adecuada.

Mientras que para el propósito fue el hecho de la apertura de una posición. Qty aún no es interesante (fácil de implementar).

Tal vez te falta una función, algo como SymbolSelect.

En este caso, se trata de un comando Nombre

https://www.mql5.com/ru/docs/standardlibrary/tradeclasses/csymbolinfo/csymbolinfoask - ver nota

Документация по 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: Hay un código que no funciona por alguna razón. El precio en el método m_symbol.Ask() devuelve 0.
Mira la propia implementación de la biblioteca. El método Ask() devuelve estúpidamente el valor de m_tick.ask. El método RefreshRates() se utiliza para refrescar los valores de m_tick).
 

¿Puede alguien dar un ejemplo de código?

¿Cómo crear una "ScrollBar decimal"?

He utilizado la clase 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
 
Si no recuerdo mal, la función OnDeinit() tiene 2,5 segundos para ejecutarse. Pregunta 1: si no están libres todas las asas de los indicadores durante este tiempo, ¿qué ocurre? Pregunta 2: ¿Existe un límite de tiempo para OnInit()?
 
paladin800:

Si no recuerdo mal, la función OnDeinit() necesita 2,5 segundos para ejecutarse.

Pregunta 1: si no se liberan todas las asas de los indicadores durante este tiempo, ¿qué ocurre?

Los manejadores de los indicadores son un tema aparte en MT5, porque su liberación es controlada no tanto por el propio Asesor Experto (sólo puede enviar un mensaje de que no los necesita y restablecer el valor del manejador), como por el propio terminal (que toma la decisión final de eliminar completamente el manejador del indicador).


Pregunta 2: ¿hay un límite de tiempo para OnInit()?

no
 

¿Puede decirme cuál debe ser la "banda de beneficios" por año? (в %%)

Archivos adjuntos:
12.png  45 kb
 
Estoy escribiendo un Asesor Experto multidivisa donde en los parámetros de entrada establezco el nombre del instrumento, como la cadena Symbol0="EURUSD". Si escribo el nombre equivocado, el comercio no va. Pregunta: ¿Existe una función que compare los nombres de los instrumentos con los instrumentos ofrecidos por el corredor?
Документация по MQL5: Основы языка / Типы данных / Тип string
Документация по MQL5: Основы языка / Типы данных / Тип string
  • www.mql5.com
Основы языка / Типы данных / Тип string - Документация по MQL5