for (int i =::ArrayResize(TmpSort, ::ArraySize(ARRAY)) - 1; i >= 0; i--)
No te aconsejo que lo escribas así. Si el sistema no asigna la cantidad de memoria necesaria a la matriz, el programa seguirá ejecutándose en silencio, lo que tendrá consecuencias imprevisibles.
No te aconsejo que lo escribas así. Si el sistema no asigna la cantidad de memoria necesaria para la matriz, el programa seguirá ejecutándose en silencio, lo que tendrá consecuencias imprevisibles.
Para el comercio real estoy obligado a poner esto.
y obtener una notificación detallada en caso de que haya un error al ejecutar ArrayResize o ArrayCopy.
Esto le permite ver problemas difíciles de identificar en el paso de información a través de arrays, pero aún más importante, obtener un mensaje de que el EA se ha detenido debido a un array fuera de rango(no es culpa del EA). Por ejemplo, por falta de memoria o algún otro fallo. En otras palabras, sabrá de inmediato que se ha producido una parada anormal del EA, en lugar de notarlo accidentalmente unas horas más tarde.
La biblioteca HistoryTicks ya contiene esta línea (no es necesario añadirla), porque el propósito principal de las herramientas - la lucha contra los Asesores Expertos en cuentas reales.
En el diario de la Terminal, sólo había un registro de este tipo en otro proyecto.
MemoryException 4471871064 bytes not available, 0 heapmin result
Gracias a la línea insertada, se pueden ver los detalles de lo ocurrido en el registro de usuarios
Alert: ThirdPartyTicks - ERROR in int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint)! - see the logs.
int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 64: ::MQLInfoString(MQL_PROGRAM_PATH) = C:\Program Files\ICMarkets - MetaTrader 5\MQL5\Scripts\fxsaber\ThirdPartyTicks.ex5
PROGRAM_SCRIPTint ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 66: typename(T) = MqlTickint ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 67: sizeof(T) = 60int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 68: Res = -1int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 69: NewSize = 129140int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 70: Reserve = 74402041int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 71: ::ArraySize(Array) = 129139int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 72: PrevSize = 129139int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 73: NewSize*sizeof(T) = 7748400int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 74: PrevSize*sizeof(T) = 7748340int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 75: Reserve*sizeof(T) = 169155164int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 76: ::GetLastError() = 4004int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 77: DuringTime = 1195int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 79: ::TerminalInfoInteger(TERMINAL_BUILD) = 2138int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 80: ::TerminalInfoInteger(TERMINAL_DISK_SPACE) = 6344int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 81: ::TerminalInfoInteger(TERMINAL_MEMORY_PHYSICAL) = 16301int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 82: ::TerminalInfoInteger(TERMINAL_MEMORY_AVAILABLE) = 31530int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 83: ::TerminalInfoInteger(TERMINAL_MEMORY_TOTAL) = 32602int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 84: ::TerminalInfoInteger(TERMINAL_MEMORY_USED) = 1072int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 86: ::ChartID() = 132088214536525342int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 87: ::PeriodSeconds() = 60int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 88: ::Symbol() = EURUSD
int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 89: ::TimeCurrent() = 2019.09.1019:49:15int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 90: ::TimeLocal() = 2019.09.1019:49:12int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 94: ::SymbolInfoTick(_Symbol,Tick) = true
time = 2019.09.1019:49:13.178 bid = 1.10436 ask = 1.10439 last = 0.00000 volume = 02TICK_FLAG_BIDint ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],constint,constint), Line = 97: ::ChartSetInteger(0,CHART_BRING_TO_TOP,true) = true
array out of range in 'Array.mqh' (11,10)
He probado diferentes variantes de la función SymbolInfoDouble(symbol, ...) en MQL5, no puedo encontrar la variante correcta, devuelve 0 en todas partes.
He probado diferentes variantes de la función SymbolInfoDouble(symbol, ...) en MQL5, no puedo encontrar la variante correcta, devuelve 0 en todas partes.
Все продукты Маркета перед публикацией проходят обязательную предварительную проверку, так как небольшая ошибка в логике советника или индикатора может привести к убыткам на торговом счете. Именно поэтому нами разработана серия базовых проверок, призванных обеспечить необходимый уровень качества продуктов Маркета. Если в процессе проверки...
Lo siento, no entendí por qué necesitaba este enlace. No vi la respuesta a mi pregunta allí.
¿Qué es exactamente lo que no has visto en el artículo?
Ejemplos de comprobación:
MQL5
bool CheckMoneyForTrade(string symb,double lots,ENUM_ORDER_TYPE type)
{
//--- получим цену открытияMqlTick mqltick;
SymbolInfoTick(symb,mqltick);
double price=mqltick.ask;
if(type==ORDER_TYPE_SELL)
price=mqltick.bid;
//--- значения необходимой и свободной маржиdouble margin,free_margin=AccountInfoDouble(ACCOUNT_MARGIN_FREE);
//--- вызовем функцию проверкиif(!OrderCalcMargin(type,symb,lots,price,margin))
{
//--- что-то пошло не так, сообщим и вернем falsePrint("Error in ",__FUNCTION__," code=",GetLastError());
return(false);
}
//--- если не хватает средств на проведение операцииif(margin>free_margin)
{
//--- сообщим об ошибке и вернем falsePrint("Not enough money for ",EnumToString(type)," ",lots," ",symb," Error code=",GetLastError());
return(false);
}
//--- проверка прошла успешноreturn(true);
}
//--- вызовем функцию проверкиif(!OrderCalcMargin(type,symb,lots,price,margin))
{
//--- что-то пошло не так, сообщим и вернем falsePrint("Error in ",__FUNCTION__," code=",GetLastError());
return(false);
}
//--- если не хватает средств на проведение операцииif(margin>free_margin)
{
//--- сообщим об ошибке и вернем falsePrint("Not enough money for ",EnumToString(type)," ",lots," ",symb," Error code=",GetLastError());
return(false);
}
No te aconsejo que lo escribas así. Si el sistema no asigna la cantidad de memoria necesaria a la matriz, el programa seguirá ejecutándose en silencio, lo que tendrá consecuencias imprevisibles.
No te aconsejo que lo escribas así. Si el sistema no asigna la cantidad de memoria necesaria para la matriz, el programa seguirá ejecutándose en silencio, lo que tendrá consecuencias imprevisibles.
Para el comercio real estoy obligado a poner esto.
Foro sobre comercio, sistemas de comercio automatizados y prueba de estrategias de comercio
Bibliotecas: HistoryTicks
fxsaber, 2019.09.10 18:58
Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading
Bibliotecas: HistoryTicks
fxsaber, 2018.12.10 13:55
Si escribe la siguiente línea en el comienzo de cualquier Asesor Experto de MT4/5y obtener una notificación detallada en caso de que haya un error al ejecutar ArrayResize o ArrayCopy.
Esto le permite ver problemas difíciles de identificar en el paso de información a través de arrays, pero aún más importante, obtener un mensaje de que el EA se ha detenido debido a un array fuera de rango(no es culpa del EA). Por ejemplo, por falta de memoria o algún otro fallo. En otras palabras, sabrá de inmediato que se ha producido una parada anormal del EA, en lugar de notarlo accidentalmente unas horas más tarde.
La biblioteca HistoryTicks ya contiene esta línea (no es necesario añadirla), porque el propósito principal de las herramientas - la lucha contra los Asesores Expertos en cuentas reales.
En el diario de la Terminal, sólo había un registro de este tipo en otro proyecto.
Gracias a la línea insertada, se pueden ver los detalles de lo ocurrido en el registro de usuarios
Por favor, sugiera un análogo de la función MQL4 MarketInfo(asymbol, MODE_MARGIN_REQUIRED) en MQL5.
Necesito conseguir la cantidad de fondos libres necesarios para abrir 1 lote para comprar.
He probado diferentes variantes de la función SymbolInfoDouble(symbol, ...) en MQL5, no puedo encontrar la variante correcta, devuelve 0 en todas partes.
Por favor, sugiera un análogo de la función MQL4 MarketInfo(asymbol, MODE_MARGIN_REQUIRED) en MQL5.
Necesito conseguir la cantidad de fondos libres necesarios para abrir 1 lote para comprar.
He probado diferentes variantes de la función SymbolInfoDouble(symbol, ...) en MQL5, no puedo encontrar la variante correcta, devuelve 0 en todas partes.
https://www.mql5.com/ru/articles/2555#not_enough_money
https://www.mql5.com/ru/articles/2555#not_enough_money
Lo siento, no entendí por qué necesitaba este enlace. No vi la respuesta a mi pregunta allí.
Lo siento, no entendí por qué necesitaba este enlace. No vi la respuesta a mi pregunta allí.
¿Qué es exactamente lo que no has visto en el artículo?
Ejemplos de comprobación:
MQL5
¿Qué es exactamente lo que no has visto en el artículo?
Ejemplos de comprobación:
MQL5
Necesita obtenerla cantidad de fondos libres necesarios para abrir 1 lote para comprar.
¿Qué tiene que ver el cheque en el artículo?
Necesidad de obtenerla cantidad de fondos disponibles necesarios para abrir 1 lote para comprar.
¿Qué tiene que ver el cheque del artículo?
Porque el artículo enseña el estudio diligente del material.
El ejemplo incluso le da la función completa para comprobar antes de enviar la orden de comercio.
Uno:
e inmediatamente la referencia:
MARGEN_DE_CUENTA_LIBRE
Tamaño de los fondos libres en la cuenta en la moneda del depósito, disponible para la apertura de posiciones
AccountInfoDouble
y dos es el cheque mínimo:
Necesidad de obtenerla cantidad de fondos disponibles necesarios para abrir 1 lote para comprar.
¿Qué tiene que ver el cheque del artículo?
no creía que tuviera problemas para leer el código corto, entonces lea la ayudahttps://www.mql5.com/ru/docs/trading/ordercalcmargin
Mientras que el artículo enseña el estudio diligente del material.
El ejemplo incluso da la función completa de comprobar antes de enviar una orden de comercio.
Uno:
y enseguida la referencia:
MARGEN_DE_CUENTA_LIBRE
Tamaño de los fondos libres en la cuenta en la moneda del depósito, disponible para la apertura de posiciones
AccountInfoDouble
y dos - cheque mínimo:
Tamaño de los fondos libres en la cuenta en la moneda del depósito, disponible para abrir una posición que no necesito
Calculo el tamaño del lote como % del saldo.
Necesito obtener la cantidad defondos disponibles necesarios para abrir 1 lote para comprar.