alex12: J'essaie de synthétiser l'analyse des mouvements de prix et la gestion de l'attention par la PNL, et mon cerveau est en pilotage automatique :)
Dans la quête de l'illumination, l'essentiel est de choisir les bonnes substances pour ne pas voler trop loin...
J'ai commencé à apprendre MQL4 et je n'arrive pas à comprendre comment une commande est sélectionnée.
du tutoriel :
for(int i=1 ; i<=OrdersTotal() ; i++) // La boucle de commande
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Si
{
si (OrderSymbol()!= Symb) continuer ;
Ce que je comprends, c'est que pour i=1 tant que i<= Nombre d'ordres
Si l'ordre sélectionné en position i-1 (c'est-à-dire l'ordre #0) existe
Comparez-le au symbole
Puis ajouter 1(i++) à i et commencer une nouvelle itération
Je ne comprends pas le commentaire // S'il y a un ordre suivant (que voulez-vous dire : suivant par position ou cet ordre qui est actuellement sélectionné ?)
Vladon: S'il y a un ordre, c'est-à-dire qu'il existe sous le numéro et-1, alors passez à la condition suivante.
Il trouvera toujours un ordre avec le numéro zéro (qui est i-1). Quelle méthode insensée pour déterminer la "prochaine" commande, vraiment trompeuse...
Il trouvera toujours un ordre avec un numéro zéro (qui est i-1). Il s'agit d'une méthode sauvage pour déterminer la "prochaine" commande, qui est vraiment trompeuse...
S'il n'y a pas de commandes, alors avec ce modèle :
for(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
{
if (OrderSymbol()!= Symb) continue;
il ne passera pas à la condition suivante.
car il n'y a pas d'ordre et-1 (dans notre cas =0)
Bien sûr, il n'est pas pratique de l'écrire de cette façon et on ne sait pas pourquoi il devrait en être ainsi,
et non, par exemple, de cette manière :
for(int i=0; i<OrdersTotal(); i++) // Цикл перебора ордер
{
if (OrderSelect(i,SELECT_BY_POS)==true) // Если есть следующий
{
if (OrderSymbol()!= Symb) continue;
Bonjour Mr. les programmeurs, j'ai une question, je ne peux pas apprendre une partie du code pour fermer le pourcentage du solde du compte. il ne ferme pas le pourcentage mais tout à la fois et tous les ordres qui sont dans le marché. j'ai besoin que ce serait fermer un ordre spécifique et le pourcentage calculé du solde du dépôt.conseiller ce que je fais mal ?
S'il n'y a pas d'ordres dans une telle construction :
il ne passera pas à la condition suivante.
car il n'y a pas d'ordre et-1 (dans notre cas =0)
Bien sûr, il n'est pas pratique de l'écrire de cette façon et on ne sait pas pourquoi il devrait en être ainsi,
et non, par exemple, comme ceci :
En le lisant, j'ai aussi pensé pourquoi ne pas simplement mettre i=0, cela semble plus simple et plus clair.
Voici le code complet du script, il y a peut-être une bonne raison pour laquelle l'auteur a mis i=1 au lieu de i=0. Je ne m'y connais pas assez et il se peut tout simplement que je ne le voie pas, alors que j'ai besoin de comprendre le mécanisme de fonctionnement pour ne pas soulever de questions plus tard
// closeorder.mq4// Предназначен для использования в качестве примера в учебнике MQL4.//--------------------------------------------------------------- 1 --int start() // Спец.функция start
{
string Symb=Symbol(); // Финанс. инструментdouble Dist=1000000.0; // Предустановкаint Real_Order=-1; // Пока рыночных нетdouble Win_Price=WindowPriceOnDropped(); // Здесь брошен скрипт//--------------------------------------------------------------- 2 --for(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
{ // Анализ ордеров://------------------------------------------------------ 3 --if (OrderSymbol()!= Symb) continue; // Не наш фин.инструм.int Tip=OrderType(); // Тип ордераif (Tip>1) continue; // Отложенный ордер //------------------------------------------------------ 4 --double Price=OrderOpenPrice(); // Цена ордераif (NormalizeDouble(MathAbs(Price-Win_Price),Digits)< //ВыборNormalizeDouble(Dist,Digits)) // самого близкого орд
{
Dist=MathAbs(Price-Win_Price); // Новое значение
Real_Order=Tip; // Есть рыночный ордерint Ticket=OrderTicket(); // Номер ордераdouble Lot=OrderLots(); // Количество лотов
}
//------------------------------------------------------ 5 --
} //Конец анализа ордера
} //Конец перебора орд.//--------------------------------------------------------------- 6 --while(true) // Цикл закрытия орд.
{
if (Real_Order==-1) // Если рыночных нет
{
Alert("По ",Symb," рыночных ордеров нет");
break; // Выход из цикла закр
}
//--------------------------------------------------------- 7 --switch(Real_Order) // По типу ордера
{
case0: double Price_Cls=Bid; // Ордер Buystring Text="Buy "; // Текст для Buybreak; // Из switchcase1: Price_Cls=Ask; // Ордер Sell
Text="Sell "; // Текст для Sell
}
Alert("Попытка закрыть ",Text," ",Ticket,". Ожидание ответа..");
bool Ans=OrderClose(Ticket,Lot,Price_Cls,2);// Закрытие ордера//--------------------------------------------------------- 8 --if (Ans==true) // Получилось :)
{
Alert ("Закрыт ордер ",Text," ",Ticket);
break; // Выход из цикла закр
}
//--------------------------------------------------------- 9 --int Error=GetLastError(); // Не получилось :(switch(Error) // Преодолимые ошибки
{
case135:Alert("Цена изменилась. Пробуем ещё раз..");
RefreshRates(); // Обновим данныеcontinue; // На след. итерациюcase136:Alert("Нет цен. Ждём новый тик..");
while(RefreshRates()==false) // До нового тикаSleep(1); // Задержка в циклеcontinue; // На след. итерациюcase146:Alert("Подсистема торговли занята. Пробуем ещё..");
Sleep(500); // Простое решениеRefreshRates(); // Обновим данныеcontinue; // На след. итерацию
}
switch(Error) // Критические ошибки
{
case2 : Alert("Общая ошибка.");
break; // Выход из switchcase5 : Alert("Старая версия клиентского терминала.");
break; // Выход из switchcase64: Alert("Счет заблокирован.");
break; // Выход из switchcase133:Alert("Торговля запрещена");
break; // Выход из switchdefault: Alert("Возникла ошибка ",Error);//Другие варианты
}
break; // Выход из цикла закр
}
//-------------------------------------------------------------- 10 --Alert ("Скрипт закончил работу -----------------------------");
return; // Выход из start()
}
Si vous prenez votre nombre 108, vous obtiendrez au maximum 151 à la puissance 151 - 108^151=1.11426138071861e+307
108^152=1.20340229117609e+309 est trop pour une programmation MCL, sans parler de 108^4096
Quel genre de calculs nécessiterait une telle échelle ?
J'essaie de synthétiser l'analyse des mouvements de prix et la gestion de l'attention par la PNL, et mon cerveau est en pilotage automatique :)
J'ai commencé à apprendre MQL4 et je n'arrive pas à comprendre comment une commande est sélectionnée.
du tutoriel :
for(int i=1 ; i<=OrdersTotal() ; i++) // La boucle de commande
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Si
{
si (OrderSymbol()!= Symb) continuer ;
Ce que je comprends, c'est que pour i=1 tant que i<= Nombre d'ordres
Si l'ordre sélectionné en position i-1 (c'est-à-dire l'ordre #0) existe
Comparez-le au symbole
Puis ajouter 1(i++) à i et commencer une nouvelle itération
Je ne comprends pas le commentaire // S'il y a un ordre suivant (que voulez-vous dire : suivant par position ou cet ordre qui est actuellement sélectionné ?)
Veuillez expliquer en russe.
S'il y a un ordre, c'est-à-dire qu'il existe sous le numéro et-1, alors passez à la condition suivante.
Il trouvera toujours un ordre avec le numéro zéro (qui est i-1). Quelle méthode insensée pour déterminer la "prochaine" commande, vraiment trompeuse...
Il trouvera toujours un ordre avec un numéro zéro (qui est i-1). Il s'agit d'une méthode sauvage pour déterminer la "prochaine" commande, qui est vraiment trompeuse...
S'il n'y a pas de commandes, alors avec ce modèle :
il ne passera pas à la condition suivante.
car il n'y a pas d'ordre et-1 (dans notre cas =0)
Bien sûr, il n'est pas pratique de l'écrire de cette façon et on ne sait pas pourquoi il devrait en être ainsi,
et non, par exemple, de cette manière :
Bonjour Mr. les programmeurs, j'ai une question, je ne peux pas apprendre une partie du code pour fermer le pourcentage du solde du compte. il ne ferme pas le pourcentage mais tout à la fois et tous les ordres qui sont dans le marché. j'ai besoin que ce serait fermer un ordre spécifique et le pourcentage calculé du solde du dépôt.conseiller ce que je fais mal ?
extern double Percent = 2.0 ;
extern int Slippage = 2 ;
double stop ;
void OnStart()
{
if (Digits == 3 || Digits == 5)
{
Slippage *= 10 ;
}
for(int i = OrdersTotal()-1 ; i>=0 ; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol())
{
if (OrderType() == OP_BUY || OrderType() == OP_SELL)
{
if(stop==AccountBalance()/100*Percent)
stop=AccountBalance()/100*Percent ;
if(stop<=AccountBalance())
{
OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Aqua) ;
OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Aqua) ;
}//if(ostop<=AccountBalance())
}////(ostop==AccountBalance()/100*Percent)
}//// (OrderSymbol() == Symbol() )
}// (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
}//// for(int i = OrdersTotal()-1 ; i>=0 ; i--)
return ;
}////void OnStart()
//+-----------------------------------------------------------------
Comment ça ?
et ceci :
ne seront jamais remplies.
donc :
travaillera toujours avec chaque commande.
CONCLUSION : tout est faux.
Votre fonction doit être réfléchie, je n'ai pas de réponse rapide.
mais au moins c'est comme ça pour commencer :
S'il n'y a pas d'ordres dans une telle construction :
il ne passera pas à la condition suivante.
car il n'y a pas d'ordre et-1 (dans notre cas =0)
Bien sûr, il n'est pas pratique de l'écrire de cette façon et on ne sait pas pourquoi il devrait en être ainsi,
et non, par exemple, comme ceci :
En le lisant, j'ai aussi pensé pourquoi ne pas simplement mettre i=0, cela semble plus simple et plus clair.
Voici le code complet du script, il y a peut-être une bonne raison pour laquelle l'auteur a mis i=1 au lieu de i=0. Je ne m'y connais pas assez et il se peut tout simplement que je ne le voie pas, alors que j'ai besoin de comprendre le mécanisme de fonctionnement pour ne pas soulever de questions plus tard