Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 182
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Y no has mostrado ni un solo trozo de tu código, no está claro por qué muestras un ejemplo.
struct p{
double trailingProfit;
int orders[10];
bool flagOpen;// флаг , указывающий на открытость позиции
//тут еще куча связанных параметров
};
p order[];
int OrderN=-1;
int OnInit()
{
ArrayResize(pair,1,1000);
return(INIT_SUCCEEDED);
}
void openOrder(price){
OrderN++;
int t;
ArrayResize(orders,order+1);
t=OrderSend(Symbol(),OP_BUYSTOP,2,(NormalizeDouble(price,Digits)),3,0,0,"pair",MAGICN,0,Blue);
if(t==0) Print("не удалось выставить ордер BUYSTOP ", price);
for(intj=0,j<10,++j){
if(orders[OrderN].orders==0) orders[OrderN].orders=t;
break;
}
orders[OrderN].flagOpen=1;
}
//...... тут идет обработка позиций...
void massCut(){
// нужна вот такая функция
}
¿Qué ocurre con el conjunto de estructuras cuando se reinicia el EA?
¿Qué ocurre con la matriz de la estructura cuando se reinicia el EA?
La matriz se borrará, este problema no se ha resuelto.
Allí. Y esto debería haberse tenido en cuenta desde el principio.
La conclusión es obvia: hay que poner a cero la matriz y volver a llenarla con el estado actual de las órdenes y las posiciones. Pero esto sólo debe hacerse cuando se detecten cambios en la cantidad de órdenes o posiciones en la cuenta.
Siempre tendrá a mano sólo el estado actual de las órdenes y posiciones, y no habrá necesidad de molestarse en eliminar las órdenes/posiciones no existentes de la matriz. Y la lista de pedidos/posiciones tendrá que ser recorrida por completo, o por un periodo determinado de la historia, pero sólo en casos específicos - cuando el número de pedidos/posiciones en la cuenta cambia.
¿Por qué necesitas esa perversión?
Para que onInit no gire en cada reinicialización y reduzca el array estático en una sola instancia porque en algunos lugares se escribe dos veces... en general, esto es optimización de recursos
... Lo dejaré como está, es más simple por el momento
Se declara un array global sin especificar el tamaño. Su función establece su tamaño mediante ArrayResize. Y es visible globalmente, y OnInit se libera...
No es del todo correcto, el array es estático con valores claramente definidos, no tiene sentido inicializarlo por separado(
para evitar que OnInit gire en cada reinicialización y para reducir el array estático a una instancia porque en algunos lugares se escribe dos veces... en general esto es optimización de recursos
...lo dejaré como está ahora.
¿No se tienen en cuenta las comisiones en el probador de MT4?
Pregunta sobre la función Print(); ¿cómo hacer que Print() imprima los datos más la fecha (día) en el EA? ¡ayudar a un principiante a entender el plz, poner el código para rehacer el experimento, induke "pivote" de antemano cbs!
el propio código: PivotsDaily v2.mq4
#propiedad ventana_del_gráfica_del_indicador
#property indicator_buffers 3
#property indicator_color1 Lime
#property indicator_color2 Azul
#property indicator_color3 Rojo
//---- parámetros de entrada
extern inttern CountBars=300;
//---- buffers
doble PBuffer[];
doble S1Buffer[];
doble R1Buffer[];
string Pivot="P", Sup1="S 1", Res1="R 1";
int fontsize=10;
doble P,S1,R1,S2,R2,S3,R3;
double UltimoAlto,UltimoBajo,x;
//+------------------------------------------------------------------+
//| Función de desinicialización del indicador Custor |
//+------------------------------------------------------------------+
int deinit()
{
ObjectDelete("Pivot");
ObjectDelete("S1");
ObjectDelete("R1");
return(0);
}
//+------------------------------------------------------------------+
//| Función de inicialización de indicadores personalizada |
//+------------------------------------------------------------------+
int init()
{
nombre_corto_de_cadena;
IndicatorBuffers(7);
//---- línea indicadora
SetIndexStyle(0,DRAW_ARROW,2,1,Lime);
SetIndexArrow(0,158);
SetIndexStyle(1,DRAW_ARROW,2,1,Blue);
SetIndexArrow(1,158);
SetIndexStyle(2,DRAW_ARROW,2,1,Red);
SetIndexArrow(2,158);
SetIndexBuffer(0,PBuffer);
SetIndexBuffer(1,S1Buffer);
SetIndexBuffer(2,R1Buffer);
//---- nombre para la etiqueta de la subventana DataWindow y del indicador
short_name="Pivote";
IndicadorNombreCorto(nombre_corto);
SetIndexLabel(0,short_name);
short_name="R1";
IndicadorNombreCorto(nombre_corto);
SetIndexLabel(2,short_name);
short_name="S1";
IndicadorNombreCorto(nombre_corto);
SetIndexLabel(1,short_name);
SetIndexDrawBegin(0,6);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Función de iteración de indicadores personalizada |
//+------------------------------------------------------------------+
int inicio()
{
int barras_contadas=IndicadorContado();
int límite, i;
//---- cálculo del indicador
si (barras_contadas==0)
{
x=Período();
si (x>CountBars) return(-1);
ObjectCreate("Pivot", OBJ_TEXT, 0, 0,0);
ObjectSetText("Pivot", " Pivot",10, "Arial",Lime);
ObjectCreate("S1", OBJ_TEXT, 0, 0, 0);
ObjectSetText("S1", " S1",10, "Arial",Blue);
ObjectCreate("R1", OBJ_TEXT, 0, 0, 0);
ObjectSetText("R1", " R1",10, "Arial",Red);
}
if(counted_bars<0) return(-1);
limit=(Bares-contados_barras)-1;
for (i=limit; i>=0;i--)
{
if (TimeDayOfWeek(Time[i]) != 0)
{
if (High[i+1]>LastHigh) LastHigh=High[i+1];
if (Low[i+1]<LastLow) LastLow=Low[i+1];
}
si (
TimeDay(Time[i])!=TimeDay(Time[i+1]) && TimeDayOfWeek(Time[i])!=0
)
{
P=Cerrar[i+1];
R1 = LastLow;
S1 = ÚltimoAlto;
S2=Alto[i]-Bajo[i];
S3=High[i]-Open[i+1];
si(S3==0)
{R2 = S3;} si no {R2 = S2/S3;}
Print("R2 ",R2); // <= ¿cómo consigo que la impresora más los datos impriman la fecha?
LastLow=Open[i]; LastHigh=Open[i];
ObjectMove("Pivot", 0, Time[i],P);
ObjectMove("S1", 0, Time[i],S1);
ObjectMove("R1", 0, Time[i],R1);
}
PBuffer[i]=P;
S1Buffer[i]=S1;
R1Buffer[i]=R1;
}
//----
return(0);
}