for (int i =::ArrayResize(TmpSort, ::ArraySize(ARRAY)) - 1; i >= 0; i--)
Não o aconselho a escrevê-lo desta forma. Se o sistema não conseguir atribuir a quantidade de memória necessária à matriz, o programa continuará a funcionar silenciosamente, levando a consequências imprevisíveis.
Não o aconselho a escrevê-lo desta forma. Se o sistema não conseguir atribuir a quantidade de memória necessária para a matriz, o programa continuará a funcionar silenciosamente, levando a consequências imprevisíveis.
Para uma verdadeira troca, sou obrigado a colocar isto.
depois obter uma notificação detalhada no caso de haver um erro ao executar o ArrayResize ou o ArrayCopy.
Isto permite-lhe ver com dificuldade a identificação de problemas na passagem de informação através de matrizes, mas ainda mais importante, obter uma mensagem de que a EA parou devido a uma matriz fora de alcance(não por culpa da EA). Por exemplo, devido a uma falta de memória ou alguma outra falha. Por outras palavras, saberá de imediato que se verificou uma paragem anormal da EA, em vez de a notar acidentalmente algumas horas mais tarde.
A biblioteca HistoryTicks já contém esta linha (não há necessidade de a acrescentar), porque o principal objectivo das ferramentas - combater os Expert Advisors em contas reais.
No diário Terminal, só existia tal registo num outro projecto.
MemoryException 4471871064 bytes not available, 0 heapmin result
Graças à linha inserida, os detalhes do que aconteceu podem ser vistos no registo do utilizador
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)
Experimentei diferentes variantes da função SymbolInfoDouble(símbolo, ...) na MQL5, não consigo encontrar a variante certa, ela retorna 0 em todo o lado.
Experimentei diferentes variantes da função SymbolInfoDouble(símbolo, ...) na MQL5, não consigo encontrar a variante certa, ela retorna 0 em todo o lado.
Все продукты Маркета перед публикацией проходят обязательную предварительную проверку, так как небольшая ошибка в логике советника или индикатора может привести к убыткам на торговом счете. Именно поэтому нами разработана серия базовых проверок, призванных обеспечить необходимый уровень качества продуктов Маркета. Если в процессе проверки...
Desculpe, não percebi porque precisava desta ligação. Não vi aí a resposta à minha pergunta.
O que é que não viu exactamente no artigo?
Exemplos de verificação:
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);
}
Não o aconselho a escrevê-lo desta forma. Se o sistema não conseguir atribuir a quantidade de memória necessária à matriz, o programa continuará a funcionar silenciosamente, levando a consequências imprevisíveis.
Não o aconselho a escrevê-lo desta forma. Se o sistema não conseguir atribuir a quantidade de memória necessária para a matriz, o programa continuará a funcionar silenciosamente, levando a consequências imprevisíveis.
Para uma verdadeira troca, sou obrigado a colocar isto.
Fórum sobre comércio, sistemas comerciais automatizados e teste de estratégias comerciais
Bibliotecas: HistoryTicks
fxsaber, 2019.09.10 18:58
Fórum sobre comércio, sistemas automatizados de comércio e testes de estratégia comercial
Bibliotecas: HistoryTicks
fxsaber, 2018.12.10 13:55
Se escrever a seguinte linha no início de qualquer Expert Advisor MT4/5depois obter uma notificação detalhada no caso de haver um erro ao executar o ArrayResize ou o ArrayCopy.
Isto permite-lhe ver com dificuldade a identificação de problemas na passagem de informação através de matrizes, mas ainda mais importante, obter uma mensagem de que a EA parou devido a uma matriz fora de alcance(não por culpa da EA). Por exemplo, devido a uma falta de memória ou alguma outra falha. Por outras palavras, saberá de imediato que se verificou uma paragem anormal da EA, em vez de a notar acidentalmente algumas horas mais tarde.
A biblioteca HistoryTicks já contém esta linha (não há necessidade de a acrescentar), porque o principal objectivo das ferramentas - combater os Expert Advisors em contas reais.
No diário Terminal, só existia tal registo num outro projecto.
Graças à linha inserida, os detalhes do que aconteceu podem ser vistos no registo do utilizador
Sugerir um análogo da função MQL4 MarketInfo(asymbol, MODE_MARGIN_REQUIRED) em MQL5.
Preciso de obter a quantidade de fundos grátis necessária para abrir 1 lote para comprar.
Experimentei diferentes variantes da função SymbolInfoDouble(símbolo, ...) na MQL5, não consigo encontrar a variante certa, ela retorna 0 em todo o lado.
Sugerir um análogo da função MQL4 MarketInfo(asymbol, MODE_MARGIN_REQUIRED) em MQL5.
Preciso de obter a quantidade de fundos grátis necessária para abrir 1 lote para comprar.
Experimentei diferentes variantes da função SymbolInfoDouble(símbolo, ...) na MQL5, não consigo encontrar a variante certa, ela retorna 0 em todo o lado.
https://www.mql5.com/ru/articles/2555#not_enough_money
https://www.mql5.com/ru/articles/2555#not_enough_money
Desculpe, não percebi porque precisava desta ligação. Não vi aí a resposta à minha pergunta.
Desculpe, não percebi porque precisava desta ligação. Não vi aí a resposta à minha pergunta.
O que é que não viu exactamente no artigo?
Exemplos de verificação:
MQL5
O que é que não viu exactamente no artigo?
Exemplos de verificação:
MQL5
É necessário obtero montante de fundos gratuitos necessários para abrir 1 lote para comprar.
O que é que o cheque no artigo tem a ver com isso?
Necessidade de obtero montante de fundos disponíveis necessários para abrir 1 lote para comprar.
O que tem o cheque do artigo a ver com isto?
Porque o artigo ensina o estudo diligente do material.
O exemplo dá mesmo a função completa de verificar antes de enviar a ordem de comércio.
Um:
e imediatamente a referência:
ACCOUNT_MARGIN_FREE
Tamanho de fundos livres na conta na moeda de depósito, disponíveis para abertura de posição
AccountInfoDouble
e dois é a verificação mínima:
Necessidade de obtero montante de fundos disponíveis necessários para abrir 1 lote para comprar.
O que tem o cheque do artigo a ver com isto?
não pensou que teria problemas em ler o código curto, depois leia a ajudahttps://www.mql5.com/ru/docs/trading/ordercalcmargin
Enquanto o artigo ensina o estudo diligente do material.
O exemplo dá mesmo a função completa de verificação antes de enviar uma ordem de comércio.
Um:
e, de imediato, a referência:
ACCOUNT_MARGIN_FREE
Tamanho de fundos livres na conta na moeda de depósito, disponíveis para abertura de posição
AccountInfoDouble
e dois - verificação mínima:
Tamanho da conta na moeda de depósito disponível para abrir uma posição de que não preciso
Calculo o tamanho do lote como % do saldo.
Preciso de obter o montante defundos disponíveis necessários para abrir 1 lote para comprar.