Demandez ! - page 148

 

Quelqu'un peut-il m'aider à mieux comprendre comment modifier le code pour permettre à l'EA d'exécuter des ordres simultanés dans plusieurs instances (en d'autres termes, je teste le même EA, sur plusieurs paires à la fois, et j'utilise des numéros magiques différents pour chaque instance).

Le code original comprend ceci :

int total=OrdersTotal() ;

si(total<1)

Et je pense que c'est là que se situe le problème. Si j'augmente le nombre, cela ne fait qu'exécuter plusieurs ordres sur la même barre (M15) pour la même paire. Si je laisse if(total<1), alors il ne permettra pas d'ordres simultanés sur différentes paires.

Puis-je changer quelque chose concernant le tick ou la barre pour permettre un seul ordre à la fois par paire, mais plusieurs ordres pour toutes les paires auxquelles l'EA (avec un numéro magique différent) est attaché ?

Merci à tous ceux qui peuvent m'aider ou me donner leur avis !

Chili

 

Confusion sur les instructions if multiples

/////////////////////DÉBUT DES TRANSACTIONS LE DIMANCHE/////////////////////////

StartDay=7 ; StartHour=1 ; StartMinute=55 ;

{

si(TimeDayOfWeek(TimeCurrent())==StartDay)

{

si(TimeHour(TimeCurrent())==StartHour)

{

if(TimeMinute(TimeCurrent())==StartMinute)

{

}

}

}

}

J'essaie de faire en sorte que mon EA s'active lorsque les rôles du septième jour (jour 7), de l'heure 1 et des 55 minutes sont en place. Qu'est-ce que je fais de travers ? Aujourd'hui, j'ai démarré l'ordinateur et l'EA a commencé à trader tout de suite (avant l'heure 1) ! Veuillez m'aider.

Merci !

Dave

 
JForex78:
Bonjour,

Je veux savoir comment tracer un croisement de MA d'une échelle de temps inférieure sur un graphique d'une échelle de temps supérieure.

Par exemple, je veux tracer une flèche sur le graphique H1 lorsque les MA5 et MA10 de M15 se croisent.

Veuillez m'informer.

Merci,

JForex.

Une MA sur n'importe quel graphique est juste une version supérieure/inférieure d'une MA sur un cadre temporel supérieur/inférieur. Par exemple, si vous placez une MA de 60 sur un graphique de 5 minutes mais que vous voulez voir à quoi elle ressemble sur un graphique horaire, vous devez simplement multiplier 60 par 12 (intervalles de 5 minutes dans une heure). Ainsi, une MA 720 sur un graphique horaire est identique à une MA 60 sur un graphique 5 minutes.

Est-ce que cela a un sens ?

Lux

 
1Dave7:
/////////////////////DÉBUT DU TRADING LE DIMANCHE/////////////////////////

StartDay=7 ; StartHour=1 ; StartMinute=55 ;

{

si(TimeDayOfWeek(TimeCurrent())==StartDay)

{

if(TimeHour(TimeCurrent())==StartHour)

{

if(TimeMinute(TimeCurrent())==StartMinute)

{

}

}

}

}

J'essaie de faire en sorte que mon EA s'active lorsque les rôles du septième jour (jour 7), de l'heure 1 et des 55 minutes sont en place. Qu'est-ce que je fais de travers ? Aujourd'hui, j'ai démarré l'ordinateur et l'EA a commencé à trader tout de suite (avant l'heure 1) ! Veuillez m'aider.

Merci !

Dave

Regardez à nouveau le fichier d'aide.

Renvoie le jour de la semaine actuel basé sur zéro (0-dimanche,1,2,3,4,5,6) de la dernière heure connue du serveur.

Lux

 
Chilibowl:
Quelqu'un peut-il m'aider à mieux comprendre comment modifier le code pour permettre à l'EA d'exécuter des ordres simultanés dans plusieurs instances (en d'autres termes, je teste le même EA, sur plusieurs paires à la fois, et j'utilise des numéros magiques différents pour chaque instance).

Le code original comprend ceci :

int total=OrdersTotal() ;

si(total<1)

Et je pense que c'est là que se situe le problème. Si j'augmente le nombre, il exécute simplement plusieurs ordres sur la même barre (M15) pour la même paire. Si je laisse if(total<1), alors il ne permettra pas d'ordres simultanés sur différentes paires.

Puis-je changer quelque chose concernant le tick ou la barre pour permettre un seul ordre à la fois par paire, mais plusieurs ordres pour toutes les paires auxquelles l'EA (avec un numéro magique différent) est attaché ?

Merci à tous ceux qui peuvent m'aider ou me donner leur avis !

Chili

OrdersTotal est une fonction intégrée qui ne tient pas compte du numéro magique. Vous devez écrire votre propre fonction qui utilise OrdersTotal mais qui filtre par numéro magique et probablement aussi par symbole. Il existe de nombreux exemples ici et ailleurs.

Bonne chance.

Lux

 
luxinterior:
Regardez à nouveau le fichier d'aide. Lux

J'ai changé le StartDay en 0, et changé le StartHour en l'heure GMT actuelle de mon courtier, et changé le StartMinute en 5 minutes d'avance sur les minutes GMT - Cela fonctionne toujours lorsque l'heure GMT correspond à mon heure de départ. J'ai regardé les fichiers d'aide et ils ne montrent pas d'instruction if multiple. Les instructions if multiples me déroutent toujours. Qu'est-ce que je fais de mal ? Je veux que le programme n'effectue pas de transactions jusqu'à l'heure de début appropriée le dimanche, et qu'il fasse un commentaire "Heure de non-transaction" jusqu'à ce que l'heure = l'heure de début le dimanche.

Très confus !

? ????

 
luxinterior:
OrdersTotal est une fonction intégrée qui ne tient pas compte du nombre magique. Vous devez écrire votre propre fonction qui utilise OrdersTotal mais qui filtre par numéro magique et probablement aussi par symbole. Il existe de nombreux exemples ici et ailleurs.

Bonne chance.

Lux

En voici un que j'ai fabriqué et que j'ai utilisé assez souvent :

int OTBM(int intMagic)//OrdersTotalByMagic

{

int intCount=0;

int intPOS=0;

bool boolTerm=false;

while(boolTerm==false)

{

if(OrderSelect(intPOS,SELECT_BY_POS))

{

if(OrderMagicNumber()==intMagic) intCount++;

intPOS++;

}

else

boolTerm=true;

}

return(intCount);

}

[/PHP]

And if you want to close only a certain order by magic number:

int CBM(int intMagic)//CloseByMagic

{

int intOffset=0;

int Count = OTBM(intMagic);

while(OTBM(intMagic)>0 && Count > 0)

{

OrderSelect(intOffset,SELECT_BY_POS);

if(OrderMagicNumber()==intMagic)

{

if(OrderType()==OP_BUY) OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),999,Red);

else if(OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),999,Orange);

Count--;

}

else {

intOffset++;

}

}

return(0);

}

Order Profit By Magic:

[PHP]double OPBM(int intMagic)//OrderProfitByMagic

{

double dblProfit=0;

int intPOS=0;

bool boolTerm=false;

while(boolTerm==false)

{

if(OrderSelect(intPOS,SELECT_BY_POS))

{

if(OrderMagicNumber()==intMagic) dblProfit=dblProfit+OrderProfit();

intPOS++;

}

else

boolTerm=true;

}

return(dblProfit);

}

J'espère que cela vous aidera.

 
luxinterior:
Une MA sur n'importe quel graphique est juste une version supérieure/inférieure d'une MA sur un cadre temporel supérieur/inférieur. Par exemple, si vous placez une MA de 60 sur un graphique de 5 minutes mais que vous voulez voir à quoi elle ressemble sur un graphique horaire, vous devez simplement multiplier 60 par 12 (intervalles de 5 minutes dans une heure). Ainsi, une MA 720 sur un graphique horaire est identique à une MA 60 sur un graphique 5 minutes.

C'est logique ?

Lux

C'est tout à fait logique. Comment verrez-vous une M5 10MA sur un graphique H1 ?

10/12=0.84. Pouvez-vous mettre une MA de 0.84 sur un graphique H1 ? Non.

Mais cela fonctionne dans l'autre sens - H1 10MA = M5 120MA.

Ma question est donc la suivante : comment puis-je voir un croisement de 5MA sur une échelle de temps supérieure comme H4 ?

Merci.

 
 

Boucle for sur MQL4

En lisant le cours MQL4 de Coders' Guru, je suis tombé sur cette partie de la boucle 'for' dans la leçon 5 qui me laisse perplexe. Il est dit qu'il ne peut y avoir qu'une seule expression de test. Mais les exemples montrés contiennent 2 expressions de test.

int i ;

int j ;

for(i=0,j=0;i<15,i<;i++,j++)

Imprimer(i) ;

int i ;

for(i=15;i>0,i<;i--)

Print(i) ;

Quelqu'un peut-il m'éclairer ?

Merci.