Interesting: O mais provável é que o sejam. Eu também tenho metade do meu código ligado a um temporizador, agora tenho de esperar por uma nova construção ou inventar muletas :(
Exactamente, apenas mudou o OnTimer para OnTick e tudo correu como antes, mas a optimização por núcleos é realizada um a um, não simultaneamente. Parece-me que os criadores irão corrigir tais erros óbvios rapidamente (espero).
Exactamente, apenas mudou o OnTimer para OnTick e tudo correu como antes, mas a optimização por núcleos é realizada um a um, não simultaneamente. Parece-me que os criadores irão corrigir tais erros óbvios rapidamente (espero).
Também pensei que os erros óbvios (trabalho de teste) em eventos personalizados seriam corrigidos rapidamente. Ainda têm de usar muletas... :(
Valmars: No meu caso, não ajudou.
Deve haver algumas peculiaridades.
Experimentei-o no Win 2003 Server SP2 x32 (AMD 2600+, um núcleo). E posso dizer que foi feito com um Expert Advisor "vazio". Apenas duas variáveis e um par de funções foram adicionadas (as que definem o estado do temporizador e apanham o primeiro arranque).
Na discussão do Campeonato 2010 https://championship.mql5.com/2010/ru/users/capr, um participante afixou o seu código EA. Tentei compilá-lo (construir 355). Os resultados da compilação mostram vários avisos. Estou interessado no seguinte fragmento. Existe um fragmento deste tipo no código:
void CountOrderStop(string symbol)
{
datetime from=0;
datetime to=TimeCurrent();
//--- запросить всю историюHistorySelect(from,to);
//--- переменные для получения значений из свойств ордераulong ticket;
double open_price;
double initial_volume;
datetime time_setup;
// string symbol;string type;
long order_magic;
count_sell_stop=0;
count_buy_stop=0;
//--- количество текущих отложенных ордеровuint total=OrdersTotal();
//--- пройдем в цикле по всем ордерамfor(uint i=0;i<total;i++)
{
//--- получим тикет ордера по его позиции в спискеif(ticket=OrderGetTicket(i) && (GetOrderType(OrderGetInteger(ORDER_TYPE))=="buy stop limit" || GetOrderType(OrderGetInteger(ORDER_TYPE))=="buy stop" || GetOrderType(OrderGetInteger(ORDER_TYPE))=="buy limit") && OrderGetString(ORDER_SYMBOL)==symbol)
{
//--- получим свойства ордера
open_price= OrderGetDouble(ORDER_PRICE_OPEN);
time_setup= OrderGetInteger(ORDER_TIME_SETUP);
symbol= OrderGetString(ORDER_SYMBOL);
order_magic= OrderGetInteger(ORDER_MAGIC);
int positionID = OrderGetInteger(ORDER_POSITION_ID);
initial_volume= OrderGetDouble(ORDER_VOLUME_INITIAL);
type=GetOrderType(OrderGetInteger(ORDER_TYPE));
count_buy_stop=count_buy_stop+1;
}
if(ticket=OrderGetTicket(i) && (GetOrderType(OrderGetInteger(ORDER_TYPE))=="sell stop limit" || GetOrderType(OrderGetInteger(ORDER_TYPE))=="sell limit" || GetOrderType(OrderGetInteger(ORDER_TYPE))=="sell stop") && OrderGetString(ORDER_SYMBOL)==symbol)
{
//--- получим свойства ордера
open_price= OrderGetDouble(ORDER_PRICE_OPEN);
time_setup= OrderGetInteger(ORDER_TIME_SETUP);
symbol= OrderGetString(ORDER_SYMBOL);
order_magic= OrderGetInteger(ORDER_MAGIC);
int positionID = OrderGetInteger(ORDER_POSITION_ID);
initial_volume= OrderGetDouble(ORDER_VOLUME_INITIAL);
type=GetOrderType(OrderGetInteger(ORDER_TYPE));
count_sell_stop=count_sell_stop+1;
}
count_order = count_buy_stop + count_sell_stop;
}
//---
}
De duas construções do mesmo tipo se(ticket= ... o compilador gera o aviso "não é booleano" apenas para o último (ou seja, "mascara" um aviso anterior semelhante). Se comentar a declaração if no aviso (para efeitos de verificação do compilador!), o aviso é gerado para uma construção semelhante que não foi alterada mas que estava ausente no protocolo durante a compilação anterior.
class tick{
public:
MqlTick data; //новые тиковые данныеbool refresh(); //метод обновления тиковых данных с проверкой на поступление новых данныхvoid write(); //запись тиковых данных в файл
.........
void tick::write(void){
if (file_handle>0)FileWrite(file_handle,data.bid);
}
Tudo parece estar claro sobre o preço não normalizado: não o vi para grandes eventos (até agora), para cruzes - para alguns eventos raramente, e para outros mais frequentemente - significa que o terminal me dá esses dados
Escreve arrays de qualquer tipo num ficheiro do tipo BIN, excepto para arrays de cordas (pode ser um conjunto de estruturas que não contenham cordas e arrays dinâmicos).
intFileWriteArray( intfile_handle,// manípulo do ficheiro matriz vazia[],// matriz intstart_item=0,// índice inicial na matriz intitems_count=WHOLE_ARRAY// número de elementos );
Por exemplo (o código deve ser actualizado para evitar a sobre-escrita de registos existentes):
//+------------------------------------------------------------------+//| Test_FileWriteStruct.mq5 |//| Copyright 2010, MetaQuotes Software Corp. |//| http://www.mql5.com |//+------------------------------------------------------------------+#property copyright "Copyright 2010, MetaQuotes Software Corp."#property link "http://www.mql5.com"#property version "1.00"//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+class Tick
{
private:
int m_file_handle;
public:
MqlTick data; //новые тиковые данныеvoid Tick(){m_file_handle=FileOpen("tickrecords.dat",FILE_READ|FILE_WRITE|FILE_BIN);};
void ~Tick(){if(m_file_handle!=INVALID_HANDLE) FileClose(m_file_handle);};
bool refresh(); //метод обновления тиковых данных с проверкой на поступление новых данныхvoid write(); //запись тиковых данных в файл
};
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+bool Tick::refresh(void)
{
bool res=SymbolInfoTick(Symbol(),data);
if(!res) Print("Неудачный вызов SymbolInfoTick(), ошибка ",GetLastError());
return(res);
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+void Tick::write(void)
{
if(m_file_handle!=INVALID_HANDLE)FileWriteStruct(m_file_handle,data,size);
elsePrint("Не удалось записать данные в файл. Ошибка ",GetLastError());
}
Tick tick;
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
//---if(tick.refresh()) tick.write();
}
//+------------------------------------------------------------------+
Por exemplo (o código precisa de ser melhorado, para não sobrescrever registos já existentes):
OK, muito obrigado, estava apenas a escrever para um ficheiro de texto para teste, estava a começar a duvidar como o MqlTick é essencialmente uma estrutura :)
ZS: nada mau - basicamente restaurou a minha classe e o meu código ;) - lamento, que não queira criar os seus próprios gráficos offline em MT5 - estou a escrever para MT4+MT5, fiquei viciado em TF não normalizada
O mais provável é que o sejam. Eu também tenho metade do meu código ligado a um temporizador, agora tenho de esperar por uma nova construção ou inventar muletas :(
Exactamente, apenas mudou o OnTimer para OnTick e tudo correu como antes, mas a optimização por núcleos é realizada um a um, não simultaneamente. Parece-me que os criadores irão corrigir tais erros óbvios rapidamente (espero).
Este código não activa o temporizador
Mas esta tem.
Exactamente, apenas mudou o OnTimer para OnTick e tudo correu como antes, mas a optimização por núcleos é realizada um a um, não simultaneamente. Parece-me que os criadores irão corrigir tais erros óbvios rapidamente (espero).
No meu caso, não ajudou.
Deve haver algumas peculiaridades.
Experimentei-o no Win 2003 Server SP2 x32 (AMD 2600+, um núcleo). E posso dizer que foi feito com um Expert Advisor "vazio". Apenas duas variáveis e um par de funções foram adicionadas (as que definem o estado do temporizador e apanham o primeiro arranque).
Para onde foi o código 10005 e o que é que ele significa ?
Algo entre um requote (10004) e "pedido rejeitado" (10006) ?
Na discussão do Campeonato 2010 https://championship.mql5.com/2010/ru/users/capr, um participante afixou o seu código EA. Tentei compilá-lo (construir 355). Os resultados da compilação mostram vários avisos. Estou interessado no seguinte fragmento. Existe um fragmento deste tipo no código:
De duas construções do mesmo tipo se(ticket= ... o compilador gera o aviso "não é booleano" apenas para o último (ou seja, "mascara" um aviso anterior semelhante). Se comentar a declaração if no aviso (para efeitos de verificação do compilador!), o aviso é gerado para uma construção semelhante que não foi alterada mas que estava ausente no protocolo durante a compilação anterior.
Isto é uma característica ou um bug?
Erros, MetaTrader 5 MQL, Aberto, Iniciado: 2010.11.06 11:32, #25823
Dê-me uma resposta
Não sei se é suposto ser assim, mas ao escrever para um ficheiro
Por vezes recebo preços não-normalizados:
81.42
81.41
81.41
81.40000000000001
81.40000000000001
81.40000000000001
81.40000000000001
81.41
81.40000000000001
81.41
81.41
porquê?
e por alguma razão não podia escrever para ficheiro usando FileWriteStruct( file_handle,data, sizeof(data));
e por alguma razão não podia escrever no ficheiro utilizando FileWriteStruct( file_handle,data, sizeof(data));
Preciso de escrever para um ficheiro binário - https://www.mql5.com/ru/docs/files/filewritearray
FileWriteArray
Escreve arrays de qualquer tipo num ficheiro do tipo BIN, excepto para arrays de cordas (pode ser um conjunto de estruturas que não contenham cordas e arrays dinâmicos).
intFileWriteArray(
intfile_handle,// manípulo do ficheiro
matriz vazia[],// matriz
intstart_item=0,// índice inicial na matriz
intitems_count=WHOLE_ARRAY// número de elementos
);
Por exemplo (o código deve ser actualizado para evitar a sobre-escrita de registos existentes):
Precisa de escrever para um ficheiro binário - https://www.mql5.com/ru/docs/files/filewritearray
Por exemplo (o código precisa de ser melhorado, para não sobrescrever registos já existentes):
OK, muito obrigado, estava apenas a escrever para um ficheiro de texto para teste, estava a começar a duvidar como o MqlTick é essencialmente uma estrutura :)
ZS: nada mau - basicamente restaurou a minha classe e o meu código ;) - lamento, que não queira criar os seus próprios gráficos offline em MT5 - estou a escrever para MT4+MT5, fiquei viciado em TF não normalizada