OK, alors si je comprends bien, vous obtenez trois fonctions personnalisées différentes avec le retour de la bonne (si vous cherchez trois paramètres différents)
ArraySort
puis
Recherche dans les tableaux par le bon numéro
et ensuite comment y faire face ?
Exactement la transition d'un tableau à un élément de structure
Vous ne comprenez pas.
Vous devez créer une seule fonction qui remplira et triera le tableau déclaré globalement. Le tableau devra être transmis à la fonction par référence.
Et vous avez besoin de fonctions supplémentaires qui extrairont de ce tableau les données dont vous avez besoin.
Veuillez m'indiquer à quoi devrait ressembler la condition. Si un stop loss est déclenché, le lot est alors multiplié par 2, et si l'ordre suivant déclenche un take profit, le lot revient au lot initial, qui était avant le stop loss.
Je le comprends comme ça, mais je ne sais pas comment continuer...
for (int i=OrdersHistoryTotal()-1; i>=0; i--) { if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) { if (OrderMagicNumber()==magic) { if (OrderStopLoss()==OrderClosePrice()) { lot=lot*4; } } }
Une autre question, qu'est-ce que j'ai écrit de faux dans le bloc de suppression des ordres ? Il ne supprime pas toujours les ordres, dans le journal, il est écrit
OrderDelete error 4108 market order #1 cannot be deleted
Vous essayez de supprimer un ordre au marché, ils ne sont pas supprimés, ils sont fermés à l'aide de la fonction OrderClose(). Pour que la boucle se supprime ou se ferme correctement, nous devons distinguer l'ordre par son type.
if(OrderType()<=OP_SELL) - pour les ordres au marché, if(OrderType()>OP_SELL) - pour les ordres en attente.
Veuillez m'indiquer à quoi devrait ressembler la condition. Si un stop loss est déclenché, le lot est alors multiplié par 2, et si l'ordre suivant déclenche un take profit, le lot revient au lot initial, qui était avant le stop loss.
Je le comprends comme ça, mais je ne sais pas comment continuer...
for (int i=OrdersHistoryTotal()-1; i>=0; i--) { if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) { if (OrderMagicNumber()==magic) { if (OrderStopLoss()==OrderClosePrice()) { lot=lot*4; } } }
}
Si vous l'avez fait rapidement, le dernier ordre perdant apparaîtra, ce qu'il faut en faire et les paramètres à corriger, je pense que vous comprendrez.
Veuillez m'indiquer à quoi devrait ressembler la condition. Si un stop loss est déclenché, le lot est alors multiplié par 2, et si l'ordre suivant déclenche un take profit, le lot revient au lot initial, qui était avant le stop loss.
Je le comprends comme ça, mais je ne sais pas comment continuer...
for (int i=OrdersHistoryTotal()-1; i>=0; i--) { if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) { if (OrderMagicNumber()==magic) { if (OrderStopLoss()==OrderClosePrice()) { lot=lot*4; } } }
}
La solution à ce problème dépend de la logique complète de l'Expert Advisor, vous pouvez retracer le déclenchement du stoploss ou du takeprofit par son commentaire.
Vous devez créer une seule fonction qui remplit et trie le tableaudéclaré au niveau global. Le tableau devra être transmis à la fonction par référence.
Et vous avez besoin de fonctions supplémentaires qui extrairont de ce tableau les données dont vous avez besoin.
Artem, tu as tort. Le tableau, déclaré à un niveau global, est visible dans toutes les parties du programme, et vous n'avez pas besoin de le passer de quelque part en quelque sorte. Il est simplement rempli à un endroit du programme, trié à un autre, et lu au troisième, peu importe.
Si vous le comparez à l'équilibre, c'est comme ça :
Merci.
OK, alors si je comprends bien, vous obtenez trois fonctions personnalisées différentes avec le retour de la bonne (si vous cherchez trois paramètres différents)
ArraySort
puis
Recherche dans les tableaux par le bon numéro
et ensuite comment y faire face ?
Exactement la transition d'un tableau à un élément de structureVous ne comprenez pas.
Vous devez créer une seule fonction qui remplira et triera le tableau déclaré globalement. Le tableau devra être transmis à la fonction par référence.
Et vous avez besoin de fonctions supplémentaires qui extrairont de ce tableau les données dont vous avez besoin.
Vous ne comprenez pas.
Vous devez créer une seule fonction qui remplit et trie le tableau déclaré globalement. Le tableau devra être transmis à la fonction par référence.
Et vous avez besoin de fonctions supplémentaires qui prendront les données dont vous avez besoin dans ce tableau.
ok, pouvez-vous nous montrer comment extraire quelque chose d'un tableau de structures ? disons rempli et trié.
comment transférer par référence et par écrit.
Veuillez m'indiquer à quoi devrait ressembler la condition. Si un stop loss est déclenché, le lot est alors multiplié par 2, et si l'ordre suivant déclenche un take profit, le lot revient au lot initial, qui était avant le stop loss.
Je le comprends comme ça, mais je ne sais pas comment continuer...
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)
{
if (OrderMagicNumber()==magic)
{
if (OrderStopLoss()==OrderClosePrice())
{
lot=lot*4;
}
}
}
}
Une autre question, qu'est-ce que j'ai écrit de faux dans le bloc de suppression des ordres ? Il ne supprime pas toujours les ordres, dans le journal, il est écrit
market order #1 cannot be deleted
{
for(int n=OrdersTotal()-1;n>=0;n--)
{
if(OrderSelect(n,SELECT_BY_POS))
{
if(OrderMagicNumber()==magic)
{
bool del=OrderDelete(OrderTicket());
if (del==true)
{
otl_b=0; otl_s=0; //обнуляем переменные отложек
}
}
}
}
}
Une autre question, qu'ai-je écrit de faux dans le bloc pour supprimer les ordres ? Il ne supprime pas toujours les ordres, le journal indique que
market order #1 cannot be deleted
{
for(int n=OrdersTotal()-1;n>=0;n--)
{
if(OrderSelect(n,SELECT_BY_POS))
{
if(OrderMagicNumber()==magic)
{
bool del=OrderDelete(OrderTicket());
if (del==true)
{
otl_b=0; otl_s=0; //обнуляем переменные отложек
}
}
}
}
}
Vous essayez de supprimer un ordre au marché, ils ne sont pas supprimés, ils sont fermés à l'aide de la fonction OrderClose(). Pour que la boucle se supprime ou se ferme correctement, nous devons distinguer l'ordre par son type.
if(OrderType()<=OP_SELL) - pour les ordres au marché, if(OrderType()>OP_SELL) - pour les ordres en attente.
Il existe un élément appeléCHARTEVENT_MOUSE_MOVE.
Question : cela fonctionne-t-il sur les appareils mobiles où il n'y a pas de souris ?
Veuillez m'indiquer à quoi devrait ressembler la condition. Si un stop loss est déclenché, le lot est alors multiplié par 2, et si l'ordre suivant déclenche un take profit, le lot revient au lot initial, qui était avant le stop loss.
Je le comprends comme ça, mais je ne sais pas comment continuer...
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)
{
if (OrderMagicNumber()==magic)
{
if (OrderStopLoss()==OrderClosePrice())
{
lot=lot*4;
}
}
}
}
Veuillez m'indiquer à quoi devrait ressembler la condition. Si un stop loss est déclenché, le lot est alors multiplié par 2, et si l'ordre suivant déclenche un take profit, le lot revient au lot initial, qui était avant le stop loss.
Je le comprends comme ça, mais je ne sais pas comment continuer...
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)
{
if (OrderMagicNumber()==magic)
{
if (OrderStopLoss()==OrderClosePrice())
{
lot=lot*4;
}
}
}
}
La solution à ce problème dépend de la logique complète de l'Expert Advisor, vous pouvez retracer le déclenchement du stoploss ou du takeprofit par son commentaire.
if(StringFind(OrderComment(),"tp")>=0)// сработал тейкпрофит
...
Vous ne comprenez pas.
Vous devez créer une seule fonction qui remplit et trie le tableau déclaré au niveau global. Le tableau devra être transmis à la fonction par référence.
Et vous avez besoin de fonctions supplémentaires qui extrairont de ce tableau les données dont vous avez besoin.