Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 22

 
Artyom Trishkin:

О ! Merci. (gloussements) Je ne l'ai pas réalisé moi-même le matin... Il faut quand même faire une vérification pour le remplissage des tableaux. Dans Quatermass n'a pas rencontré, et dans Five assez souvent pas rempli les données la première fois en raison du manque de données historiques.

ZS. Vous devriez dormir davantage - vos pensées iront dans ce sens.

Eh bien, vous pouvez le mettre dans une boucle

do while(CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle) < 0);

ou même

do while(CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle) < 15);

pour copier exactement le montant demandé.


ps ; Pendant que j'allais verser le thé, j'ai eu une autre idée, pour utiliser CopyRates() et les structures de tableau MqlRates rates[] mais je suis trop paresseux pour réécrire quelque chose.

 
Alexey Viktorov:

Eh bien, vous pourriez aussi le mettre dans une boucle

do while(CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle) < 0);

ou même

do while(CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle) < 15);

pour copier exactement le nombre de copies demandées.


ps ; Pendant que je buvais du thé, j'ai eu une autre idée - utiliser CopyRates() et un tableau de structures MqlRates rates[], mais je suis trop paresseux pour le réécrire.

N'est-ce pas ce que j'ai proposé ?
 
giannis1386:
Aidez-moi à vérifier les autres conditions de vente.
int start()
{
//+--------------------------------------------------------------------+
//|   -= stop loss в без убыток =-                                      |
//+--------------------------------------------------------------------+
bool   result;
double stop;
int    cmd,error;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderProfit()>pOPCS)
{
cmd=OrderType();
double blevel=OrderStopLoss()<Bid-Point*TS;
double slevel=OrderStopLoss()>Ask+Point*TS;
//---
if(cmd==OP_BUY || cmd==OP_SELL)
{
while(true)
{
if(cmd==OP_BUY && blevel) stop=Bid-Point*TS;
else                      stop=Ask+Point*TS;
result=OrderModify(OrderTicket(),OrderOpenPrice(),stop,0,0,Orange);
if(result!=TRUE) { error=GetLastError(); Print("LastError = ",error); }
else error=0;
if(error==135) RefreshRates();
else break;
}
}
}
}

C'est d'une logique étrange. Mais même si vous ne regardez pas l'étrange logique, alors :

Ici, vous avez deux conditions pour acheter, et tout le reste pour vendre.

if(cmd==OP_BUY && blevel) stop=Bid-Point*TS;
else                      stop=Ask+Point*TS;
 
Artyom Trishkin:

Votre logique est étrange. Mais même si vous ne regardez pas l'étrange logique, alors :

Ici, vous avez deux conditions vérifiées pour l'achat, et tout le reste pour la vente.

if(cmd==OP_BUY && blevel) stop=Bid-Point*TS;
else                      stop=Ask+Point*TS;

J'ai essayé d'attacherslevel=OrderStopLoss()>Ask+Point*TS pour vendre;

Mais comme je ne connais rien à la programmation, rien d'utile n'en est sorti. J'ai fouillé les forums pendant une semaine.

Pourquoi cette logique bizarre ?) Le code n'est pas entièrement de moi.

 
giannis1386:

J'ai essayé d'ajouterslevel=OrderStopLoss()>Ask+Point*TS;

J'ai fait le tour des forums pendant une semaine. Toutes mes tentatives se sont soldées par un déplacement du Sell Stop en même temps que le prix.

Pourquoi cette logique bizarre ?) Le code n'est pas entièrement de moi. Je l'ai retravaillé du mieux que j'ai pu.

Pourquoi n'écrivez-vous pas d'abord les conditions dans lesquelles les stops de vente et d'achat doivent être déplacés ?

Puis, après y avoir réfléchi, écrivez dans votre code ce qui est écrit sur le bordereau.

 
Artyom Trishkin:

Et tout d'abord, écrivez sur une feuille de papier avec un crayon les conditions dans lesquelles vous devez déplacer le stop Buy et le stop Sell.

Puis, après y avoir réfléchi, écrivez dans le code ce qui est écrit sur la feuille de papier.

slevel=OrderStopLoss()>Ask+Point*TS; voici à quoi cela ressemble pour une position de vente.
 
giannis1386:
slevel=OrderStopLoss()>Ask+Point*TS; bien, il semble que ce soit le bon. Ou est-ce faux ? Je suis nouveau dans ce domaine.

Comprenez-vous seulement ce qui est écrit dans cette condition ? Il s'agit d'une affectation de zéro ou un à une variable de type double.

Que voulez-vous obtenir ?

 
Artyom Trishkin:

Comprenez-vous seulement ce qui est écrit dans cette condition ? C'est une affectation de zéro ou un à une variable de type double.

Que voulez-vous atteindre ?

voilà ce que je relis.

Vérifier la condition - ne pas déplacer le SL d'avant en arrière, mais seulement dans une direction.

Par exemple, pour un ordre d'ACHETER, votre formule

OrderStopLoss()<bid-point*TrailingStop

En utilisant cet exemple, je l'ai fait pour Sel.

 
giannis1386:

Voici ce que j'ai lu.

la condition de contrôle - ne pas déplacer SL d'avant en arrière, mais seulement dans une direction

Par exemple, pour un ordre d'ACHETER, votre formule

OrderStopLoss()<bid-point*TrailingStop

En utilisant cet exemple, je l'ai collé pour une position de vente.

Donc tu en as besoin comme ça :

en russe... si l'ordre stop est inférieur au cours acheteur moins la distance du stop suiveur, alors ... votre action

Et vous affectez à la variable le résultat de cette expression logique - c'est-à-dire soit zéro, soit un.

 
Artyom Trishkin:

Donc tu as besoin de ça :

en russe... si l'ordre stop est inférieur au cours acheteur moins la distance du stop suiveur, alors ... vos actions

Et vous affectez à la variable le résultat de cette expression booléenne - c'est-à-dire soit zéro, soit un.

Je suis complètement perdue.

double blevel=OrderStopLoss()<Bid-Point*TS; fonctionne pour moi. SL ne s'attaque au prix que pour faire du profit.

double slevel=OrderStopLoss()>Ask+Point*TS; Je ne sais pas comment ajouter celui-ci à else

ils ne sont pas un bool.