Questions des débutants MQL5 MT5 MetaTrader 5 - page 730
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
bars[]
AppeléBars, le compilateur le gronde dans les cieux. Avez-vous testé cette conception, ou avez-vous simplement supposé qu'elle devait fonctionner, ou est-ce que je fais quelque chose de mal ?
Oui, je me suis trompé. Nommez-le. En général, l'idée est de donner des noms expressifs aux variables, ainsi vous n'aurez pas besoin de créer des variables supplémentaires, dont l'existence n'est pas toujours justifiée.
La raison n'est pas d'exprimer quelque chose, mais de raccourcir le code quand on travaille avec eux :
Et le reste de la même manière, sinon la longueur des lignes augmente
Merci à tous pour les clarifications !
Je ne l'ai pas appelé pour exprimer quelque chose, mais pour réduire le code quand on travaille avec eux :
Et le reste de la même façon, sinon la longueur des lignes augmente
Merci à tous pour les clarifications !
Si vous voulez réduire le code au minimum, faites directement référence au tableau de données
//| test09.mq5 |
//| Sergey Gritsay |
//| https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link "https://www.mql5.com/ru/users/sergey1294"
#property version "1.00"
MqlRates bars[]; // массив для хранения данных цен OHLC
int start_bar=0; // с какого бара копируем
int count_bar=4; // сколько баров копируем
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
ArraySetAsSeries(bars, true);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
if(CopyRates(Symbol(),PERIOD_CURRENT, start_bar, count_bar, bars)<count_bar) return;
if(bars[1].open<bars[1].close && bars[2].close>bars[3].close && bars[1].close>bars[2].close)
{
}
}
//+------------------------------------------------------------------+
Bonjour !
Où et comment supprimer correctement les ordres placés et les positions ouvertes lors du déchargement (suppression) d'un Expert Advisor ? Si cela n'est pas difficile, veuillez nous donner un exemple.
Merci.
L'un des EA fait des bêtises étranges. Teste l'EA normalement, en cliquant sur "Exécuter un seul test", on n'exécute qu'un seul test, la première fois. Ensuite, lorsque vous cliquez sur le test unique ou sur n'importe quelle ligne de l'optimisation, cela apparaît dans le journal :
2017.02.08 13:31:05.165 Le testeur ne peut pas obtenir les entrées pour la passe 4234087422336
2017.02.08 13:31:34.829 Le testeur ne peut pas obtenir d'entrées pour la passe 4076312468706
2017.02.08 13:31:47.973 Le testeur ne peut pas obtenir d'entrées pour la passe 1004506640527.
Les autres EAs se comportent normalement. Qu'est-ce que ça peut être ?
Messieurs, l'enregistrement d'une énorme matrice 10000*10000
{
//--- запишем файл
ResetLastError();
int handle=FileOpen(path,FILE_READ|FILE_WRITE|FILE_BIN);
//---
if(handle!=INVALID_HANDLE)
{
for(int z=ARRAY_SIZE_Y; z>0; z--) // Перебор по барам, колонка Y
{
for(int q=0; q<ARRAY_SIZE_X; q++) // Перебор по периоду, колонка X
{
arra[q]=sm.d[q].m[nBar-z]; // M(I) SMA
}
//--- запишем данные массива в конец файла FileTell IsFileLineEnded
FileSeek(handle,0,SEEK_END);
FileWriteArray(handle,arra);
}
FileClose(handle);
}
else
Print("Failed to open the file, error ",GetLastError()," handle ",handle);
//---
count=1;
}
Selon vous, cet algorithme est efficace en termes de vitesse ?
Parce que lorsque la matrice est de 1000*1000 la vitesse est de quelques secondes, lorsque l'on passe à 10000*10000 le système se met en route.
Messieurs, l'enregistrement d'une énorme matrice 10000*10000
{
//--- запишем файл
ResetLastError();
int handle=FileOpen(path,FILE_READ|FILE_WRITE|FILE_BIN);
//---
if(handle!=INVALID_HANDLE)
{
for(int z=ARRAY_SIZE_Y; z>0; z--) // Перебор по барам, колонка Y
{
for(int q=0; q<ARRAY_SIZE_X; q++) // Перебор по периоду, колонка X
{
arra[q]=sm.d[q].m[nBar-z]; // M(I) SMA
}
//--- запишем данные массива в конец файла FileTell IsFileLineEnded
FileSeek(handle,0,SEEK_END);
FileWriteArray(handle,arra);
}
FileClose(handle);
}
else
Print("Failed to open the file, error ",GetLastError()," handle ",handle);
//---
count=1;
}
Selon vous, cet algorithme est efficace en termes de vitesse ?
Parce que lorsque la matrice est de 1000*1000 la vitesse est de quelques secondes, lorsque l'on passe à 10000*10000 le système se met en route.
Y a-t-il une confusion ?
Comment est-il possible d'obtenir une telle matrice si les tableaux ne sont pas autorisés à plus de quatre dimensions?
Il n'y a pas de confusion ?
10000 x 10000 n'est-il pas une matrice à deux dimensions ?
et tout ça...
Comment est-il possible d'obtenir une telle matrice si les tableaux ne sont pas autorisés à plus de quatre dimensions?
Y a-t-il une confusion ?