[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 1034

 
Techno:
sí se puede. el experto/guionista habitual

Tal vez ya exista algo similar, ¿puede decirme dónde encontrarlo? ¿O conoce a alguien que pueda escribir una?

 

ayuda por favor pro

El fragmento de código siguiente no funciona.

Los valores MA se calculan y se asignan a la variable MA

correctamente, pero no se asignan a un array. La matriz se define como doble

dinámico. El procedimiento de impresión imprime valores nulos para el array.

i=i_max; // ...calcular el número dado.

if (flag_NewBar==true) // recalcular sólo durante la llegada del primer tick

{

while(i>=0) // bucle en las barras no leídas

MA=iMA(g_ext_smb,g_ext_TameFrame,g_ext_Period_MA,0,g_ext_Method,g_ext_PRICE,i);

MA=NormalizarDoble(MA,Dígitos);

mas_MA[i]=MA;

i--; }

 

No entiendo por qué hay un error 130? Por favor, ayuda.

Aquí está el código:

   double myPrice      = NormalizeDouble(Bid - 10*Pnt*10,Digits);
   double myTakeProfit = NormalizeDouble(myPrice + TakeProfit * Pnt*10,Digits);                                                     //
   if (RAVI0_2_24_D1 > 1 && RAVI0_2_24_D1 < 5 && RAVI0_2_24_D1_1 < RAVI0_2_24_D1 && RAVI0_2_24_D1_2 < RAVI0_2_24_D1_1 && RAVI0_2_24_D1_3 < RAVI0_2_24_D1_2) myTakeProfit = myTakeProfit + 25 * Pnt*10;
   double myStopLoss   = NormalizeDouble(myPrice - StopLoss * Pnt*10,Digits);
   datetime myTimeEnd  = TimeCurrent() + wait*60;
   Alert("OP_BUYLIMIT: Spread=",MarketInfo(Symbol(),MODE_SPREAD)," Stop=",DoubleToStr(MarketInfo(Symbol(), MODE_STOPLEVEL), 2)," lot=",DoubleToStr(lotMM,3)," Pr=",DoubleToStr(myPrice,6)," SL=",DoubleToStr(myStopLoss,6)," TP=",DoubleToStr(myTakeProfit,6));
   ticket=OrderSend(Symbol(),OP_BUYLIMIT,lotMM,myPrice,Slippage,myStopLoss,myTakeProfit,ExpertName, MagicNumber,myTimeEnd,myColor);

He insertado la Alerta a propósito para ver el problema, pero no lo encuentro.

Este es el mensaje de Alert:

2010.12.13 12:39:36 2010.09.01 11:35 DVD 100-50 cent iK EURUSD,M1: OrderSend error 130

2010.12.13 12:39:36 2010.09.01 11:35 DVD 100-50 cent iK EURUSD,M1: Alerta: OP_SELLLIMIT: Spread=1 Stop=10.00 lot=0.010 Pr=1.280300 SL=1.320300 TP=1.240300

 
VNG:

ayuda por favor pro

El fragmento de código siguiente no funciona.

Los valores MA se calculan y se asignan a la variable MA

correctamente, pero no se asignan a un array. La matriz se define como doble

dinámico. El procedimiento de impresión imprime valores nulos para el array.

i=i_max; // ...calcular el número dado.

if (flag_NewBar==true) // recalcular sólo durante la llegada del primer tick

{

while(i>=0) // bucle en las barras no leídas

MA=iMA(g_ext_smb,g_ext_TameFrame,g_ext_Period_MA,0,g_ext_Method,g_ext_PRICE,i);

MA=NormalizarDoble(MA,Dígitos);

mas_MA[i]=MA;

i--; }

En mi opinión, las matrices deberían tener un tamaño determinado, excepto las matrices de los indicadores diseñados para "dibujar". Creo que debería ser insertado:
ArrayResize(mas_MA,i_max);
 
globad:

Amigos, por favor, aconsejen. ¿Es posible hacer un programa que emita un pitido cuando el precio pase de 10-11p en 0,1-0,4s?

Sugiero otra forma, 0.1-0.4s es aproximadamente un tick, el cambio asciende toda la visión del mercado por tick.
Archivos adjuntos:
temp_4.mq4  4 kb
 
ikatsko:

No entiendo por qué hay un error 130? Por favor, ayuda.

Aquí está el código:

He insertado la Alerta a propósito para ver el problema, pero no lo encuentro.

Este es el mensaje de Alert:

2010.12.13 12:39:36 2010.09.01 11:35 DVD 100-50 cent iK EURUSD,M1: OrderSend error 130

2010.12.13 12:39:36 2010.09.01 11:35 DVD 100-50 cent iK EURUSD,M1: Alerta: OP_SELLLIMIT: Spread=1 Stop=10.00 lot=0.010 Pr=1.280300 SL=1.320300 TP=1.240300


Paso a paso, cambiar las paradas tomar el precio de apertura de overshooting (porque el péndulo es menor del precio) a las constantes, averiguar casi donde el error es.

De la ayuda "Si el precio de apertura de la orden pendiente es incorrecto, se generará el error 130 (ERR_INVALID_STOPS)".

ticket=OrderSend(Symbol(),OP_BUYLIMIT,1,Close[0]+DoubleToStr(MarketInfo(Symbol(), MODE_STOPLEVEL), 2)*2,15,0,0,ExpertName, MagicNumber,myTimeEnd,myColor);
 
VNG:

ayuda por favor pro

El fragmento de código siguiente no funciona.

Los valores MA se calculan y se asignan a la variable MA

correctamente, pero no se asignan a un array. La matriz se define como doble

dinámico. El procedimiento de impresión imprime valores nulos para el array.

i=i_max; // ...calcular un número determinado.

if (flag_NewBar==true) // recalcular sólo durante la llegada del primer tick

{

while(i>=0) // bucle en las barras no leídas

MA=iMA(g_ext_smb,g_ext_TameFrame,g_ext_Period_MA,0,g_ext_Method,g_ext_PRICE,i);

MA=NormalizarDoble(MA,Dígitos);

mas_MA[i]=MA;

i--; }

Léalo

https://book.mql4.com/ru/operators/while

https://docs.mql4.com/ru/series/iBarShift

Yo haría lo siguiente

if (flag_NewBar) // пересчитываем только во время прихода первого тика
 for(i=i_max;i>=0;i--) // Цикл по непосчитанным барам
    mas_MA[i]=NormalizeDouble(iMA(g_ext_smb,g_ext_TameFrame,g_ext_Period_MA,0,g_ext_Method,g_ext_PRICE,
                                                             iBarShift(g_ext_smb,g_ext_TameFrame,Time[i],false)),Digits);
if (flag_NewBar==true) // пересчитываем только во время прихода первого тика
while(i>=0){ // Цикл по непосчитанным барам
mas_MA[i]=NormalizeDouble(iMA(g_ext_smb,g_ext_TameFrame,g_ext_Period_MA,0,g_ext_Method,g_ext_PRICE,i),Digits);
i--; 
} 
 
dime, ¿cuántos eibares menos que cero se pueden utilizar para dibujar objetos? ¿cuál es el mínimo?
 
costy_:

Paso a paso, cambiar las paradas tomar sobrepasar el precio de apertura (ya que el péndulo es más alto por debajo del precio) a las constantes, identificar prácticamente donde está el error.

De la ayuda "El error 130 (ERR_INVALID_STOPS) se generará si el precio de apertura de la orden pendiente es incorrecto".

Sí, UZH :) En efecto, el error consiste en que el precio de apertura del colgante se acerca al precio actual. Arreglado, lo tengo funcionando. GRACIAS

 
eddy:
dime, ¿cuántos eibarshifts menos que cero se pueden utilizar para dibujar objetos? ¿cuál es el mínimo?

ebarshift es Buscar una barra por tiempo (nada funcionará).

en el terminal la última barra es 0, el tiempo está vinculado a las barras, es decir, sólo así al futuro a través de cadenas

ObjectCreate("ff",OBJ_VLINE,0,StrToTime("2010.12.13 20:00"),0); //
Razón de la queja: