Makar, muchas gracias por señalar las comprobaciones que hay que hacer para no angustiar al servidor y banear al EAJ.
Controles realizados así
mod nivel de parada para la parada
//ПРОВЕРКА НА МОДЕ СТОП ЛЕВЕЛ- МИНИМАЛЬНЫЙ УРОВЕНЬ СТОПА if(sl<MarketInfo(Symbol(),MODE_STOPLEVEL)) // ЕСЛИ СТОПОЛС МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО
{
sl= MarketInfo(Symbol(),MODE_STOPLEVEL);//СТОП ЛОССУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
}
nivel de parada mod para el beneficio
// ПРОВЕРКА ТЕЙК ПРОФИТА НА МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ УСТАНОВКИif(tp<MarketInfo(Symbol(),MODE_STOPLEVEL)) // ЕСЛИ ПРОФИТ МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО
{
tp= MarketInfo(Symbol(),MODE_STOPLEVEL);// ПРОФИТУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
}
//---- ПРОВЕРКА НА РАЗРЕШЕНИЕ ТОРГОВ ПЕРЕД ОТКРЫТИЕМ ОРДЕРОВif(MarketInfo(Symbol(),MODE_TRADEALLOWED)==true)
{// начало есл торговля разрешена/*
куча проверок на условия открытия и само открытие ордеров
*/
} // КОЕНЦ ПРОВЕРКИ НА РАЗРЕШЕНИЕ ТОРГОВЛИelse//ИНАЧЕ ЕСЛИ ТОРГОВЛЯ НЕ РАЗРЕШЕНА
{ // НАЧАЛО ЭЛС ЕСЛИ ТОРГИ НЕ РАЗРЕШЕНЫ Print("ТОРГИ НЕ РАЗРЕШЕНЫ- ПЫТАТЬСЯ ОТКРЫТЬ ОРДЕРА НЕ БУДЕМ");
} // КОЕНЦ ЭЛС ЕСЛИ ТОРГИ НЕ РАЗРЕШЕНЫ
Comprobación del lote máximo y mínimo
Primero obtuve los valores de lote máximo y lote mínimo en las variables así
Y entonces compruebo en algún lugar de abajo como escribo el Grial
if(lot<Min_Lot) lot=Min_Lot; //ЕСЛИ ЛОТ ПОЛУЧИЛСЯ МЕНЬШЕ ЧЕМ МИНИМАЛЬНЫЙ ЛОТ У БРОКЕРА ТО ЛОТ ПРИСВАЕМАЕМ МИНИМАЛЬНЫЙ ЛОТ У БРОКЕРАif(lot>Max_Lot) lot=Max_Lot; //ЕСЛИ ЛОТ ПОЛУЧИЛСЯ БОЛЬШЕ ЧЕМ МАКСИМАЛЬНЫЙ ЛОТ У БРОКЕРА ТО ОЛТ ПРИСВАЕВАЕМ МАКС ЛОТ У БРОКЕРА
¿Es esto correcto o estoy equivocado?
No comprobé el cambio de paso de lote porque el lote se calcula como un porcentaje del depósito y allí este valor se multiplica por un punto y se normaliza - esta comprobación puede omitirse - ¿cierto, o debo hacerlo de todos modos? ¿Si todavía tenemos que comprobar cómo escribir este cheque?
El objetivo principal de todas estas comprobaciones es tener siempre el valor correcto de stop, beneficio y tamaño de lote, para poder empezar a abrir órdenes de forma general. Si todos estos parámetros están bien, el Asesor Experto no molestará al servidor; ¿entiendo esto correctamente?
//ПРОВЕРКА НА МОДЕ СТОП ЛЕВЕЛ- МИНИМАЛЬНЫЙ УРОВЕНЬ СТОПА if(sl<MarketInfo(Symbol(),MODE_STOPLEVEL)*1.5) // ЕСЛИ СТОПОЛС МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО
{
sl= MarketInfo(Symbol(),MODE_STOPLEVEL)*1.5;//СТОП ЛОССУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
}
// ПРОВЕРКА ТЕЙК ПРОФИТА НА МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ УСТАНОВКИif(tp<MarketInfo(Symbol(),MODE_STOPLEVEL)*1.5) // ЕСЛИ ПРОФИТ МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО
{
tp= MarketInfo(Symbol(),MODE_STOPLEVEL)*1.5;// ПРОФИТУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
}
Hola a todos, ¿alguien ha tenido algún problema con los puntos colgantes en el gráfico encontrado a través de iHighest/iLowest?
Prehistoria: Tengo una mínima experiencia en programación, estoy escribiendo un indicador en mql4 que debe mostrar los puntos en el gráfico, encontrados por las condiciones de if y conectarlos con líneas. Lógicamente, busca los puntos correctamente, pero los dibuja con un desplazamiento, luego para 2 barras, luego para 3 barras. He adjuntado el archivo con el código también.
int start()
{
int counted_bars=IndicatorCounted(); //хранит количество посчитанных индикатором баров. Функция IndicatorCounted() возвращает количество неизмененных баров после прошлого вызова функции start().int n,limit;
int val_index;
if(counted_bars>0)
counted_bars--;
limit=Bars-counted_bars; //количество последних баров, которые нужно пересчитать.if(limit>barsToProcess)
limit=barsToProcess;
for(n=0; n<=limit; n++)
{
if((Close[n+1]>Open[n+1] && Open[n+2]>=Close[n+2]) || (Close[n+1]>Open[n+1] && Open[n+3]>Close[n+3]))
{
val_index=iLowest(NULL,0,MODE_LOW,3,n+1);
myAZBuffer[n]=Low[val_index];
ExtLowBuffer[n]=Low[val_index];
}
elseif((Open[n+1]>Close[n+1] && Close[n+2]>=Open[n+2]) || (Close[n+1]<Open[n+1] && Close[n+3]>Open[n+3]))
{
val_index=iHighest(NULL,0,MODE_HIGH,3,n+1);
myAZBuffer[n]=High[val_index];
ExtHighBuffer[n]=High[val_index];
}
}
return (0);
}
Hola a todos, ¿alguien ha tenido algún problema con los puntos colgantes en el gráfico encontrado a través de iHighest/iLowest?
Prehistoria: Tengo una mínima experiencia en programación, estoy escribiendo un indicador en mql4 que debe mostrar los puntos en el gráfico, encontrados por las condiciones de if y conectarlos con líneas. Lógicamente, busca los puntos correctamente, pero los dibuja con un desplazamiento, luego para 2 barras, luego para 3 barras. He adjuntado el archivo con el código también.
Los puntos se dibujan correctamente, sin desplazamiento.
Si se cumple la condición y iHighest/iLowest son mayores o menores que el High/Low actual
los puntos se dibujan correctamente, sin desplazamiento
si se cumple la condición y iHighest/iLowest es mayor o menor que el High / Low actual
y luego dibuja
Así que, creo que estoy empezando a darme cuenta de mi error) Así que, con el fin de mostrar visualmente estos puntos en el lugar correcto, tengo que introducir algún contador separado en lugar de n para myAZBuffer[n], ExtLowBuffer[n], ExtHighBuffer[n] ? pero cómo hacer esto
azolotta: Así que, creo que estoy empezando a darme cuenta de mi error) Resulta que para mostrar visualmente estos puntos en el lugar correcto, necesito introducir algún contador separado en lugar de n para myAZBuffer[n], ExtLowBuffer[n], ExtHighBuffer[n] ? pero cómo hacerlo
No, lo has entendido bien.
la condición utiliza dos o tres barras del historial,
por eso se dibuja después de 2-3 barras cuando se cumple la condición
la condición utiliza dos o tres barras del historial,
por eso se dibuja después de 2-3 barras cuando se cumple la condición
Vale, entonces cómo rehago el código si necesito, por ejemplo, elegir el máximo de las últimas 3 barras (que cumplan las condiciones en el if) y ponerle un punto (¡justo en este máximo!), luego también encontrar el punto mínimo.
MakarFX , ¿qué función tiene este enlace: qué función realiza?
input int BarTrade = 5; // Entiendo que este es el número de los períodos de seguimiento de 5.
int TimeBarTrade=BarTrade*Period()*60; //¿Por qué se multiplica por 60?
MakarFX , ¿qué función tiene este enlace: qué función realiza?
input int BarTrade = 5; // Entiendo que este es el número de los períodos de seguimiento de 5.
int TimeBarTrade=BarTrade*Period()*60; // ¿Cómo se entiende? ¿Por qué se multiplica por 60?
BarTrade*Periodo()*60
número de barras * marco temporal actual * 60 segundos
es decir, la cantidad de barras convertida en segundos
BarTrade*Periodo()*60
número de barras * marco temporal actual * 60 segundos
es decir, el número de compases convertidos en segundos
Puedes hacerlo así.
Si excluye los errores relacionados con
MODE_STOPLEVEL, MODE_TRADEALLOWED, MODE_MINLOT, MODE_LOTSTEP, MODE_MAXLOT
entonces los búhos no golpearán el servidor.
Makar, muchas gracias por señalar las comprobaciones que hay que hacer para no angustiar al servidor y banear al EAJ.
Controles realizados así
mod nivel de parada para la parada
nivel de parada mod para el beneficio
Comprobación de la autorización comercial
Comprobación del lote máximo y mínimo
Primero obtuve los valores de lote máximo y lote mínimo en las variables así
Y entonces compruebo en algún lugar de abajo como escribo el Grial
¿Es esto correcto o estoy equivocado?
No comprobé el cambio de paso de lote porque el lote se calcula como un porcentaje del depósito y allí este valor se multiplica por un punto y se normaliza - esta comprobación puede omitirse - ¿cierto, o debo hacerlo de todos modos? ¿Si todavía tenemos que comprobar cómo escribir este cheque?
El objetivo principal de todas estas comprobaciones es tener siempre el valor correcto de stop, beneficio y tamaño de lote, para poder empezar a abrir órdenes de forma general. Si todos estos parámetros están bien, el Asesor Experto no molestará al servidor; ¿entiendo esto correctamente?
Muchas gracias, Makar, por decirme qué comprobaciones hay que hacer para evitar el servidor y banear al EAJ.
//ПРОВЕРКА НА МОДЕ СТОП ЛЕВЕЛ- МИНИМАЛЬНЫЙ УРОВЕНЬ СТОПА// ПРОВЕРКА ТЕЙК ПРОФИТА НА МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ УСТАНОВКИAquí puede haber un error de 130 debido al deslizamiento.
Yo haría esto
Hola a todos, ¿alguien ha tenido algún problema con los puntos colgantes en el gráfico encontrado a través de iHighest/iLowest?
Prehistoria: Tengo una mínima experiencia en programación, estoy escribiendo un indicador en mql4 que debe mostrar los puntos en el gráfico, encontrados por las condiciones de if y conectarlos con líneas. Lógicamente, busca los puntos correctamente, pero los dibuja con un desplazamiento, luego para 2 barras, luego para 3 barras. He adjuntado el archivo con el código también.
Hola a todos, ¿alguien ha tenido algún problema con los puntos colgantes en el gráfico encontrado a través de iHighest/iLowest?
Prehistoria: Tengo una mínima experiencia en programación, estoy escribiendo un indicador en mql4 que debe mostrar los puntos en el gráfico, encontrados por las condiciones de if y conectarlos con líneas. Lógicamente, busca los puntos correctamente, pero los dibuja con un desplazamiento, luego para 2 barras, luego para 3 barras. He adjuntado el archivo con el código también.
Los puntos se dibujan correctamente, sin desplazamiento.
Si se cumple la condición y iHighest/iLowest son mayores o menores que el High/Low actual
atrae
los puntos se dibujan correctamente, sin desplazamiento
si se cumple la condición y iHighest/iLowest es mayor o menor que el High / Low actual
y luego dibuja
Así que, creo que estoy empezando a darme cuenta de mi error) Resulta que para mostrar visualmente estos puntos en el lugar correcto, necesito introducir algún contador separado en lugar de n para myAZBuffer[n], ExtLowBuffer[n], ExtHighBuffer[n] ? pero cómo hacerlo
No, lo has entendido bien.
la condición utiliza dos o tres barras del historial,
por eso se dibuja después de 2-3 barras cuando se cumple la condición
No, lo has entendido bien.
la condición utiliza dos o tres barras del historial,
por eso se dibuja después de 2-3 barras cuando se cumple la condición