Il y aFileSeek(File,0,SEEK_END) ; et tout est écrit dans le fichier à partir d'une nouvelle ligne.
Le problème est qu'il y a 4 fichiers et que nous devons écrire des données sur quatre positions, chacune dans un fichier séparé, chaque fichier a un ticket de position dans le nom, mais les données sont écrites seulement dans un, le dernier fichier, les données sur la dernière position.
Les noms de fichiers sont-ils formés correctement ? Au lieu de Ticket=OrderTicket() ; File name=_Ticket+Symbol()+".txt" ; il faudrait écrire File name=(string)OrderTicket()+Symbol()+".txt" ; et ajouter la directive #property strict au début - aide à éliminer les erreurs
STARIJ: Les noms de fichiers sont-ils formés correctement ? Au lieu de Ticket=OrderTicket() ; File name=_Ticket+Symbol()+".txt" ; j'écrirais File name=(string)OrderTicket()+Symbol()+".txt" ; et j'ajouterais la directive #property strict au début - aide à éliminer les erreurs
Merci, la formation du nom a été refaite selon votre recommandation, mais elle n'écrit toujours que les données de la dernière position.
Et, les noms des nouveaux fichiers n'ont pas changé) Je soupçonne que ce n'est pas le nom, le fichier de la dernière position a été trouvé de toute façon.
1501896125EURUSD.txt Temps Demi Prix BID 2018.02.22 22:53 P 1,23259 0,88322 2018.02.22 22:54 P 1,23259 0,88322 2018.02.22 22:55 P 1,23259 0,88322 2018.02.22 22:56 P 1,23249 0,88322
1501896094EURUSD.txt Temps Demi Prix BID 2018.02.22 22:43 L 1,23212 1,23203 2018.02.22 22:44 L 1,23220 1,23203 2018.02.22 22:44 L 1,23224 1,23203 2018.02.22 22:45 L 1,23244 1,23203 2018.02.22 22:45 L 1,23242 1,23203 2018.02.22 22:46 L 1,23251 1,23203 j'ai changé quelque chose ? voir ... ceci : string sy="" ; int op=-1, mn=-1 ; pas vraiment nécessaire ... On peut laisser tomber ? Dans la boucle, au lieu d'un if() imbriqué, il est préférable de continuer ;
1501896125EURUSD.txt Time Half BID Price 2018.02.22.02.22 22:53 P 1,23259 0,88322 2018.02.22 22:54 P 1,23259 0,88322 2018.02.22 22:55 P 1,23259 0,88322 2018.02.22 22:56 P 1,23249 0,88322
1501896094EURUSD.txt Time Half BID Price 2018.02.22:43 L 1,23212 1,23203 2018.02.22 22:44 L 1,23220 1,23203 2018.02.22 22:44 L 1,23224 1,23203 2018.02.22:45 L 1,23244 1,23203 2018.02.02.22 22:45 L 1,23242 1,23203 2018.02.22 22:46 L 1,23251 1,23203 changer quelque chose ? voir...this : string sy="" ; int op=-1, mn=-1 ; pas vraiment nécessaire ... On peut laisser tomber ? Dans la boucle, au lieu d'un if() imbriqué, il est préférable de continuer ;
Il ne veut pas écrire sur toutes les positions.
Il y a 7 postes ouverts. J'ai écrit un fichier.
Je l'ai compilé quand il était sur un graphique et il a commencé à écrire les données de la première et de la dernière position. Maintenant, je n'ai qu'une seule donnée, de la première position.
Je ne vois pas six, mais j'ai tous les tics dansAlert(NameFile).
le programme comporte de nombreuses conditions, notamment une condition qui doit être remplie pour que le fichier soit écrit : si(t_pre+60<TimeCurrent() && _o_t+1800>TimeCurrent()) // une fois toutes les demi-heures à partir de l'ouverture de l'ordre. Est-ce nécessaire ? { t_pre=TimeCurrent() ; Le programme contient des ramifications :
for(i=0; i<k; i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==sy || sy=="")
{
if(OrderType()==OP_BUY ||
OrderType()==OP_SELL)
{
if(op<0 || OrderType()==op)
{
if(mn<0 || OrderMagicNumber()==mn)
{
_o_t=OrderOpenTime();
И еще 5 закрывающих скобок. а можно короче на 10 строк и понятнее записать так
for(i=0; i<k; i++)
{
if( ! OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue; // если ошибка выбора ордера - переходим к следующемуif(OrderSymbol()!=sy && sy!="") continue; // а это вообще надо?if(OrderType()!=OP_BUY && OrderType()!=OP_SELL) continue; // а другие разве у Вас есть?if(op>=0 && OrderType()!=op) continue;
if(mn>=0 && OrderMagicNumber()!=mn) continue;
_o_t=OrderOpenTime();
Quel était le but de l'écrire dans un escalier avant ? Dans l'ancienne version de MQL4, cela accélérait l'exécution. Il n'a plus d'importance maintenant La variable _o_t n'est utilisée qu'à 2 endroits. Si nous le remplaçons par OrderOpenTime(), le programme devient plus clair et plus court en 2 lignes (déclaration et affectation) .datetime _o_t ; et _o_t=OrderOpenTime() ;
Je l'ai - le compte à rebours de 60 secondes doit être retiré de la boucle.
//+------------------------------------------------------------------+ //| Ежеминутная информация об ордерах, открытых за последнее полчаса | //+------------------------------------------------------------------+ #property strictbool RUS=true;
datetime t_pre=0; // Время предыдущего выполнения//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+voidOnTick()
{
if(t_pre+60>=TimeCurrent()) return; // Дождаться 60 секунд после прошлой обработки
t_pre=TimeCurrent(); // Это нужно вынести за цикл - в этом было дело !!!!!!!!!!!!string text;
for(int i=0; i<OrdersTotal(); i++)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
if(OrderType()!=OP_BUY && OrderType()!=OP_SELL) continue;
string ИмяФайла=(string)OrderTicket()+Symbol()+".txt";
Alert(ИмяФайла);
if(OrderOpenTime()+60>=TimeCurrent()) continue; // Пропуск молодых которым меньше 1 минутыif(OrderOpenTime()+1800<=TimeCurrent()) continue; // Пропустк старых которым больше 30 минутif(OrderType()==OP_BUY){if(Bid>OrderOpenPrice())text="P"; else text="L";}
if(OrderType()==OP_SELL){if(Bid<OrderOpenPrice())text="P"; else text="L";}
// Открытие или создание файла и перемещение указателя в конецint Файл= FileOpen(ИмяФайла,FILE_CSV|FILE_READ|FILE_WRITE," ");
if(Файл == -1) { Alert("Ошибка при открытии файла ",ИмяФайла); return; }
FileSeek(Файл,0,SEEK_END);
// Если новый файл записать имя файла и строку заголовков колонокif(FileSize(Файл)==0)
{
FileWrite(Файл,ИмяФайла);
FileWrite(Файл," Время Полу BID Цена ");
}
// Сбор информации и запись в файлFileWrite(Файл, TimeToStr(TimeCurrent()), text,
dstr(Bid), " ", dstr(OrderOpenPrice()));
FileClose(Файл);
}
}
// Преобразование числа double в строку с запятой или точкой в соответствии с локализациейstring dstr(double Цена)
{
if(!RUS) returnDoubleToStr(Цена, Digits);
returnStringSetChar(DoubleToStr(Цена, Digits), StringFind(DoubleToStr(Цена, Digits), "."), ',');
}
Pouvez-vous me dire pourquoi l'optimisation et le test des mêmes paramètres produisent parfois des résultats différents ?
Je vais vous en dire plus : lorsque vous négociez sur un compte réel avec un courtier sur 2 comptes différents, vous pouvez obtenir des résultats différents.
Vladislav Andruschenko: Je vais vous en dire plus : lorsque vous négociez sur un compte réel avec le même courtier sur 2 comptes différents, les résultats peuvent être différents.
Cela dépend probablement plus du courtier. Mais pouvez-vous me donner un indice sur la question initiale ?
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 y aFileSeek(File,0,SEEK_END) ; et tout est écrit dans le fichier à partir d'une nouvelle ligne.
Le problème est qu'il y a 4 fichiers et que nous devons écrire des données sur quatre positions, chacune dans un fichier séparé, chaque fichier a un ticket de position dans le nom, mais les données sont écrites seulement dans un, le dernier fichier, les données sur la dernière position.
Les noms de fichiers sont-ils formés correctement ? Au lieu de Ticket=OrderTicket() ; File name=_Ticket+Symbol()+".txt" ; j'écrirais File name=(string)OrderTicket()+Symbol()+".txt" ; et j'ajouterais la directive #property strict au début - aide à éliminer les erreurs
Merci, la formation du nom a été refaite selon votre recommandation, mais elle n'écrit toujours que les données de la dernière position.
Et, les noms des nouveaux fichiers n'ont pas changé) Je soupçonne que ce n'est pas le nom, le fichier de la dernière position a été trouvé de toute façon.
Pourquoi ignore-t-il les positions précédentes ?
1501896125EURUSD.txt
Temps Demi Prix BID
2018.02.22 22:53 P 1,23259 0,88322
2018.02.22 22:54 P 1,23259 0,88322
2018.02.22 22:55 P 1,23259 0,88322
2018.02.22 22:56 P 1,23249 0,88322
1501896094EURUSD.txt
Temps Demi Prix BID
2018.02.22 22:43 L 1,23212 1,23203
2018.02.22 22:44 L 1,23220 1,23203
2018.02.22 22:44 L 1,23224 1,23203
2018.02.22 22:45 L 1,23244 1,23203
2018.02.22 22:45 L 1,23242 1,23203
2018.02.22 22:46 L 1,23251 1,23203
j'ai changé quelque chose ? voir ... ceci : string sy="" ; int op=-1, mn=-1 ; pas vraiment nécessaire ... On peut laisser tomber ? Dans la boucle, au lieu d'un if() imbriqué, il est préférable de continuer ;
1501896125EURUSD.txt
Time Half BID Price
2018.02.22.02.22 22:53 P 1,23259 0,88322
2018.02.22 22:54 P 1,23259 0,88322
2018.02.22 22:55 P 1,23259 0,88322
2018.02.22 22:56 P 1,23249 0,88322
1501896094EURUSD.txt
Time Half BID Price
2018.02.22:43 L 1,23212 1,23203
2018.02.22 22:44 L 1,23220 1,23203
2018.02.22 22:44 L 1,23224 1,23203
2018.02.22:45 L 1,23244 1,23203
2018.02.02.22 22:45 L 1,23242 1,23203
2018.02.22 22:46 L 1,23251 1,23203
changer quelque chose ? voir...this : string sy="" ; int op=-1, mn=-1 ; pas vraiment nécessaire ... On peut laisser tomber ? Dans la boucle, au lieu d'un if() imbriqué, il est préférable de continuer ;
Il ne veut pas écrire sur toutes les positions.
Il y a 7 postes ouverts. J'ai écrit un fichier.
Je l'ai compilé quand il était sur un graphique et il a commencé à écrire les données de la première et de la dernière position. Maintenant, je n'ai qu'une seule donnée, de la première position.
Je ne vois pas six, mais j'ai tous les tics dansAlert(NameFile).
De quoi a-t-il besoin...
si(t_pre+60<TimeCurrent() && _o_t+1800>TimeCurrent()) // une fois toutes les demi-heures à partir de l'ouverture de l'ordre. Est-ce nécessaire ?
{
t_pre=TimeCurrent() ;
Le programme contient des ramifications :
Quel était le but de l'écrire dans un escalier avant ? Dans l'ancienne version de MQL4, cela accélérait l'exécution. Il n'a plus d'importance maintenant
La variable _o_t n'est utilisée qu'à 2 endroits. Si nous le remplaçons par OrderOpenTime(), le programme devient plus clair et plus court en 2 lignes (déclaration et affectation)
.datetime _o_t ; et
_o_t=OrderOpenTime() ;
Je l'ai - le compte à rebours de 60 secondes doit être retiré de la boucle.
Bonjour, chers utilisateurs du forum.
Pouvez-vous me dire pourquoi l'optimisation et le test des mêmes paramètres produisent parfois des résultats différents ?
J'ai téléchargé des citations à partir de SQ Tick Downloader et je les ai passées dans le script.
Bonjour, chers amis.
Pouvez-vous me dire pourquoi l'optimisation et le test des mêmes paramètres produisent parfois des résultats différents ?
Je vais vous en dire plus : lorsque vous négociez sur un compte réel avec le même courtier sur 2 comptes différents, les résultats peuvent être différents.
Cela dépend probablement plus du courtier. Mais pouvez-vous me donner un indice sur la question initiale ?
Cela dépend probablement plus du courtier. Mais pourriez-vous donner quelques indications sur la question initiale ?