Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1941

 
Aleksandr Kononov #:
¿Hay alguna forma de comprobar la memoria? ¿Cómo se consume o algo así?

digamos que puedes influir en la memoria y calculará 200 indicadores, pero después de una semana te preguntarás por qué no se cargan 1000 indicadores... etc. círculo vicioso... Establecer tareas correctas...

 
Nikolay Ivanov #:

el código colgado no se puede aplicar en ningún sitio... Tienes que establecer las tareas que se pueden hacer... Y es más fácil estropear el código... Los indicadores tienen que trabajar rápido y no hay tiempo para cálculos súper largos.

Me gustaría conocer los límites dentro de los cuales se puede crear algo. Cuanto más que no soy un programador en absoluto, no sabría cómo manejarlo. Bueno, buscaré algo para leer

 
Aleksandr Kononov #:

Me gustaría conocer el marco en el que podría crear algo. Es difícil de entender para un principiante, sobre todo porque no soy programador en absoluto. Bien, veré lo que puedo leer.

Normalmente sólo se necesita un CCI, máximo 3 :) Y tienes 200... Estoy de acuerdo en que es difícil no sobrepasar los límites, se necesita experiencia, para establecer la tarea correcta y factible que se completará con éxito en un tiempo razonable, es difícil. Así que si necesitas un consejo sobre dónde escarbar, deberías centrarte en la optimización y minimización de ideas... Por ejemplo CCI con periodo 20 y CCI con periodo 21... casi lo mismo y no tiene sentido calcular los dos. Cuanto más alto sea el periodo menos efecto tendrá, hay que encontrar un número razonable. Una solución bonita siempre funciona rápido.

 
Nikolay Ivanov #:

Bueno, un CCI suele ser suficiente, 3 como máximo :) y tienes 200... Estoy de acuerdo contigo sobre la dificultad de mantenerse dentro de los límites... se necesita experiencia, es difícil establecer la tarea correcta y alcanzable, que se completará con éxito en un tiempo razonable. Así que si necesitas un consejo sobre dónde escarbar, deberías centrarte en la optimización y minimización de ideas... Por ejemplo CCI con periodo 20 y CCI con periodo 21... casi lo mismo y no tiene sentido calcular los dos. Cuanto más alto sea el periodo menos efecto tendrá, hay que encontrar un número razonable. Una solución bonita siempre funciona rápido.

Entiendo que el perfilador ayudará a medir el consumo de memoria. Así que lo optimizaremos). De todos modos, si alguien sabe dónde leer sobre el tema, por favor, envíeme el enlace...

 

¡hola a todos!

Por favor, indique qué debe añadirse al código para desplazar la MA no sólo hacia delante (valor positivo) sino también hacia atrás (valor negativo)

Aquí está el código del Asesor Experto:

// Параметры советника
input string  sParametersEA = "";     // Параметры советника
input double  Lot           = 0.01;   // Количество лотов
input int     StopLoss      = 30;     // Стоп (SL)
input int     TakeProfit    = 30;     // Тейк (TP)
input int     Slippage      = 3;      // Проскальзование (в пунктах)
input int     Magic         = 1;      // Индентификатор советника
input double  K_Martin1     = 0.01;    // Множитель мартин 1
input double  K_Martin2     = 1.9;    // Множитель мартин 2
input double  K_Martin3     = 1.4;    // Множитель мартин 3
input int     OrdersClose   = 3;      // Ограничение лотности мартин1
input int     OrdersClose2  = 5;      // Ограничение лотности мартин2
input int     DigitsLot     = 2;      // Точность лотности
// Параметры индикатора
input string  sParametersMA = "";     // Параметры индикатора
input int     PeriodMA      = 14;     // Период мувинга
input int     MovingShift   = 1;      // Сдвиг мувинга
// Глобальные переменные
datetime Start,newbar;
double dMA;
double MaxMartinLot;
double MaxMartinLot2;
//+-----------------------------------------------------------------------------------------------+
int OnInit()
  {
Start          = TimeCurrent();
MaxMartinLot   = Lot*MathPow(1.4,OrdersClose);
MaxMartinLot2  = Lot*MathPow(K_Martin2,OrdersClose2);
int Y          = 15;
DrawLABEL("nextlot",1,5,Y,clrLime,""); 
Y += 20;
DrawLABEL("currentlot",1,5,Y,clrLime,"");
Y += 30;
return(INIT_SUCCEEDED);
  }
//+-----------------------------------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
//+-----------------------------------------------------------------------------------------------+
void OnTick()
  {
// Получим значение индикатора
   dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.

// Если нет открытых ордеров, то входим в условие
      if(CountOrders()==0)
     {
// Если появился сигнал на покупку, то откроем ордер на покупку
      if(bSignalBuy() == true)
         vOrderOpenBuy();

// Если появился сигнал на продажу, то откроем ордер на продажу
      if(bSignalSell() == true)
         vOrderOpenSell();
     }
// Пишем какой лот текущий и какой следующий
      DrawLABEL("nextlot",1,5,0,Color1(),StringConcatenate("CURRENT LOT: ",DoubleToStr(LOT(),2)));
      DrawLABEL("currentlot",1,5,0,Color2(),StringConcatenate("NEXT LOT: ",DoubleToStr(LOT(),2))); 
 
   }
 
законопослушный гражданин #:

¡hola a todos!

Por favor, indique qué debe añadirse al código para desplazar la MA no sólo hacia delante (valor positivo) sino también hacia atrás (valor negativo)

Aquí está el código del Asesor Experto:

Añada al desplazamiento el valor negativo deseado, pero el valor + desplazamiento no debe ser inferior a cero.

 
ALEKSANDR SOKOLOV #:

Añade el valor negativo deseado al desplazamiento, pero asegúrate de que el valor + desplazamiento es al menos cero.

Gracias, lo probaré.

 

Buenas tardes.

Ayuda con el código, tal vez haya ejemplos.
Tarea:

Hay varias órdenes abiertas, con diferentes lotes, en diferentes direcciones. Uno de ellos está enterrado con beneficio, supongamos que 20. Sin embargo, hay una orden abierta con el beneficio negativo, supongamos -55 con 0,05 lotes. Quiero cerrar una parte de una orden negativa por el monto de la ganancia de una orden cerrada positivamente para disminuir el drawdown.

He intentado escribir esto utilizando el operador while, pero no me ha ido bien.

Gracias de antemano.

 

Hola, este código es del libro de Fedoseev. ¿Por qué el indicador no se dibuja en la ventana, el registro dice que se está ejecutando, no hay errores durante la compilación, una ventana adicional se abre (vacío), este código es del libro, con la mía es exactamente el mismo resultado. ¿Qué ocurre?

//+------------------------------------------------------------------+

//| 015 Symbol.mq5 |

//+------------------------------------------------------------------+

#property copyright "Dmitry Fedoseev"

#enlace de propiedad "mailto:for-good-letter@yandex.ru"

#versión de la propiedad "1.00"

#property indicador_separar_ventana

#property indicator_buffers 4

#property indicator_plots 1

//--- barra de trazado

#property indicator_label1 "bar"

#property indicator_type1 DRAW_CANDLES

#property indicador_color1 clrGray,clrBlue,clrRed

#property indicator_style1 STYLE_SOLID

#property indicator_width1 1

//--- parámetros de entrada


cadena de entrada symbol="";

input bool drawBars=false;


cadena sim;


//--- topes indicadores

doble barBuffer1[];

doble barBuffer2[];

doble barBuffer3[];

doble barBuffer4[];

//+------------------------------------------------------------------+

//| Función de inicialización de indicadores personalizada |

//+------------------------------------------------------------------+

int OnInit()

{

sym=símbolo;

StringTrimLeft(sym);

StringTrimRight(sym);

if(sym==""){

sym=Símbolo();

}

if(!SymbolSelect(sym,true)){

Alert("Símbolo desconocido ",sym);

return(INIT_FAILED);

}

if(drawBars){

PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_BARS);

}

si no{

PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_CANDLES);

}

//--- mapeo de buffers indicadores

SetIndexBuffer(0,barBuffer1,INDICATOR_DATA);

SetIndexBuffer(1,barBuffer2,INDICATOR_DATA);

SetIndexBuffer(2,barBuffer3,INDICATOR_DATA);

SetIndexBuffer(3,barBuffer4,INDICATOR_DATA);

//---

return(INIT_SUCCEED);

}


void OnDeinit(const int r){

Comentario(");

EventKillTimer();

}

//+------------------------------------------------------------------+

//| Función de iteración de indicadores personalizada |

//+------------------------------------------------------------------+

int OnCalculate(const int rates_total,

const int prev_calculado,

const datetime &time[],

const double &open[],

const double &high[],

const double &low[],

const double &close[],

const long &tick_volume[],

const long &volume[],

const int &spread[])

{

int bars=Bars(sym,Period());

si(barras==0){

Comentario("Formando marco temporal ",sym,"...");

EventSetTimer(1);

return(0);

}

int inicio;

if(prev_calculado==0){

Comentario(");

EventKillTimer();

datetime tm[1];

if(CopyTime(sym,Period(),bars-1,1,tm)==-1){

return(0);

}

inicio=0;

for(;inicio<total_de_tasas;inicio++){

if(time[start]>=tm[0]){

romper;

}

}

}

si no{

start=prev_calculado-1;

}

MqlRates r[1];

for(int i=start;i< rates_total;i++){

if(CopyRates(sym,Period(),time[i],1,r)==-1){

return(0);

}

barBuffer1[i]=r[0].open;

barBuffer2[i]=r[0].high;

barBuffer3[i]=r[0].low;

barBuffer4[i]=r[0].close;

}

return(rates_total);

}


void OnTimer()

{

ChartSetSymbolPeriod(0,Symbol(),Period());

}


//+------------------------------------------------------------------+

Archivos adjuntos:
 
MatveySt #:

Hola, este código es del libro de Fedoseev. Por qué el indicador no se dibuja en la ventana, el registro dice que se está ejecutando, no hay errores durante la compilación, una ventana adicional se abre (vacío), este código es del libro, con la mía es exactamente el mismo resultado. ¿Qué ocurre?


Alt s pega el código.

¿Y cuando fundes el inductor introduces la herramienta?

Razón de la queja: