Interesting: Il est fort probable qu'ils le soient. J'ai aussi la moitié de mon code lié à un timer, maintenant je dois attendre une nouvelle construction ou trouver des béquilles :(
Exactement, je viens de remplacer OnTimer par OnTick et tout s'est passé comme avant, mais l'optimisation par les cœurs est effectuée un par un, et non simultanément. Il me semble que les développeurs corrigeront rapidement (je l'espère) des erreurs aussi évidentes.
Exactement, je viens de remplacer OnTimer par OnTick et tout s'est passé comme avant, mais l'optimisation par les cœurs est effectuée un par un, et non simultanément. Il me semble que les développeurs corrigeront rapidement (je l'espère) des erreurs aussi évidentes.
Je pensais également que les bogues évidents (travail de testeur) sur les événements personnalisés seraient corrigés rapidement. Je dois toujours utiliser des béquilles... :(
Valmars: Dans mon cas, ça n'a pas aidé.
Il doit y avoir des particularités.
Je l'ai essayé sur Win 2003 Server SP2 x32 (AMD 2600+, un cœur). Et je peux dire que cela a été fait sur un conseiller expert "vide". Seules deux variables et quelques fonctions ont été ajoutées (celles définissant l'état du timer et la capture du premier démarrage).
Dans la discussion sur le championnat 2010 https://championship.mql5.com/2010/ru/users/capr, un participant a posté son code EA. J'ai essayé de le compiler (build 355). Les résultats de la compilation font apparaître plusieurs avertissements. Je suis intéressé par le fragment suivant. Il y a un tel fragment dans le code :
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 deux constructions de même type if(ticket= ... le compilateur génère l'avertissement "expression is not boolean" uniquement pour le dernier (c'est-à-dire qu'il "masque" un avertissement précédent similaire). Si vous commentez l'instruction if dans l'avertissement (dans le but de vérifier le compilateur !), l'avertissement est généré pour une construction similaire qui n'a pas été modifiée mais qui était absente du protocole lors de la compilation précédente.
class tick{
public:
MqlTick data; //новые тиковые данныеbool refresh(); //метод обновления тиковых данных с проверкой на поступление новых данныхvoid write(); //запись тиковых данных в файл
.........
void tick::write(void){
if (file_handle>0)FileWrite(file_handle,data.bid);
}
Tout semble être clair au sujet du prix non normalisé : je ne l'ai pas vu pour les événements majeurs (jusqu'à présent), pour les croisements - pour certains événements rarement, et pour d'autres plus souvent - cela signifie que le terminal me donne de telles données
Écrit des tableaux de tout type dans un fichier de type BIN, à l'exception des tableaux de chaînes de caractères (peut être un tableau de structures ne contenant pas de chaînes de caractères et des tableaux dynamiques).
intFileWriteArray( intfile_handle,//manipulateur de fichier voidarray[],// tableau intstart_item=0,// indice initial dans le tableau intitems_count=WHOLE_ARRAY// nombre d'éléments ) ;
Par exemple (le code doit être mis à jour pour éviter d'écraser les enregistrements existants) :
//+------------------------------------------------------------------+//| 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();
}
//+------------------------------------------------------------------+
Par exemple (le code doit être amélioré, afin qu'il n'écrase pas les enregistrements déjà existants) :
OK, merci beaucoup, j'écrivais juste dans un fichier texte pour tester, je commençais à douter que MqlTick soit essentiellement une structure :)
ZS : pas mal - j'ai essentiellement restauré ma classe et mon code ;) - Je suis désolé que vous ne souhaitiez pas créer vos propres graphiques hors ligne dans MT5 - j'écris pour MT4+MT5, je suis devenu accro aux délais non standard.
Si vous n'avez pas de compte, veuillez vous inscrire
Autorisez l'utilisation de cookies pour vous connecter au site Web MQL5.com.
Veuillez activer les paramètres nécessaires dans votre navigateur, sinon vous ne pourrez pas vous connecter.
Vous êtes connecté. L'authentification à deux facteurs a été désactivée. Configurez-la à nouveau et scannez un nouveau code QR, ou continuez avec l'authentification à deux facteurs désactivée.
Il est fort probable qu'ils le soient. J'ai aussi la moitié de mon code lié à un timer, maintenant je dois attendre une nouvelle construction ou trouver des béquilles :(
Exactement, je viens de remplacer OnTimer par OnTick et tout s'est passé comme avant, mais l'optimisation par les cœurs est effectuée un par un, et non simultanément. Il me semble que les développeurs corrigeront rapidement (je l'espère) des erreurs aussi évidentes.
Ce code ne déclenche pas la minuterie
Mais celui-là, oui.
Exactement, je viens de remplacer OnTimer par OnTick et tout s'est passé comme avant, mais l'optimisation par les cœurs est effectuée un par un, et non simultanément. Il me semble que les développeurs corrigeront rapidement (je l'espère) des erreurs aussi évidentes.
Dans mon cas, ça n'a pas aidé.
Il doit y avoir des particularités.
Je l'ai essayé sur Win 2003 Server SP2 x32 (AMD 2600+, un cœur). Et je peux dire que cela a été fait sur un conseiller expert "vide". Seules deux variables et quelques fonctions ont été ajoutées (celles définissant l'état du timer et la capture du premier démarrage).
Où est passé le code 10005 et qu'est-ce qu'il signifie ?
Quelque chose entre une requote (10004) et une "demande rejetée" (10006) ?
Dans la discussion sur le championnat 2010 https://championship.mql5.com/2010/ru/users/capr, un participant a posté son code EA. J'ai essayé de le compiler (build 355). Les résultats de la compilation font apparaître plusieurs avertissements. Je suis intéressé par le fragment suivant. Il y a un tel fragment dans le code :
De deux constructions de même type if(ticket= ... le compilateur génère l'avertissement "expression is not boolean" uniquement pour le dernier (c'est-à-dire qu'il "masque" un avertissement précédent similaire). Si vous commentez l'instruction if dans l'avertissement (dans le but de vérifier le compilateur !), l'avertissement est généré pour une construction similaire qui n'a pas été modifiée mais qui était absente du protocole lors de la compilation précédente.
Est-ce une fonctionnalité ou un bug ?
Erreurs, MetaTrader 5 MQL, Ouvert, Démarré : 2010.11.06 11:32, #25823
Donnez-moi une réponse
Je ne sais pas si c'est censé être comme ça, mais quand on écrit dans un fichier
J'obtiens parfois des prix non normalisés :
81.42
81.41
81.41
81.40000000000001
81.40000000000001
81.40000000000001
81.40000000000001
81.41
81.40000000000001
81.41
81.41
Pourquoi ?
et pour une raison quelconque, il n'a pas pu écrire dans le fichier en utilisant FileWriteStruct( file_handle,data, sizeof(data)) ;
et, pour une raison quelconque, n'a pas pu écrire dans le fichier en utilisant FileWriteStruct( file_handle,data, sizeof(data)) ;
Je dois écrire dans un fichier binaire - https://www.mql5.com/ru/docs/files/filewritearray
FileWriteArray
Écrit des tableaux de tout type dans un fichier de type BIN, à l'exception des tableaux de chaînes de caractères (peut être un tableau de structures ne contenant pas de chaînes de caractères et des tableaux dynamiques).
intFileWriteArray(
intfile_handle,//manipulateur de fichier
voidarray[],// tableau
intstart_item=0,// indice initial dans le tableau
intitems_count=WHOLE_ARRAY// nombre d'éléments
) ;
Par exemple (le code doit être mis à jour pour éviter d'écraser les enregistrements existants) :
Vous devez écrire dans un fichier binaire - https://www.mql5.com/ru/docs/files/filewritearray
Par exemple (le code doit être amélioré, afin qu'il n'écrase pas les enregistrements déjà existants) :
OK, merci beaucoup, j'écrivais juste dans un fichier texte pour tester, je commençais à douter que MqlTick soit essentiellement une structure :)
ZS : pas mal - j'ai essentiellement restauré ma classe et mon code ;) - Je suis désolé que vous ne souhaitiez pas créer vos propres graphiques hors ligne dans MT5 - j'écris pour MT4+MT5, je suis devenu accro aux délais non standard.