Comment coder ? - page 135

 

Erreur en compilant

Bonjour à tous

J'ai l'erreur suivante :

'<'-différents types dans la comparaison

J'essaie de modifier la ligne suivante :

(NonLagMA_2D_S2&&D_S2Switch==1)

en

(Price_NowD_S2&&D_S2Switch==1)

Où se situe le problème ?

Désolé, je ne peux pas télécharger le fichier mql. Ce n'est pas mon script

 
: : vous comparez quelque chose avec des types différents, donc il faut que ce soit des entiers avec des entiers, des doubles avec des doubles, des chaînes de caractères avec des chaînes de caractères... comme ceci...

IN10TION

Badguy:
Bonjour à tous

J'ai l'erreur suivante :

'<'-différents types dans la comparaison

J'essaie de modifier la ligne suivante :

(NonLagMA_2D_S2&&D_S2Switch==1)

en

(Price_NowD_S2&&D_S2Switch==1)

Où est le problème ?

Désolé, je ne peux pas télécharger le fichier mql. Ce n'est pas mon script
 

Fermeture de plusieurs positions par un nombre magique - Aide

Bonjour à tous.

Je suis nouveau dans la programmation mt4 et voici mon tout premier EA. Le but de cet EA est de fermer toutes les positions quelle que soit la paire de devises sur la base du même numéro magique.

Disons que sous le numéro magique 8675310, j'ai 2 positions EURUSD & USDCFh. Il sera capable de fermer toutes ces paires lorsqu'il atteindra un certain objectif de profit.

Le problème avec cet EA est le suivant,

Ouvrir la transaction # 1 EURUSD (capable de fermer)

Ouvrir la transaction # 2 USDCFh (ne pourra pas être fermée)

IL NE SERA PAS EN MESURE DE FERMER LA TRANSACTION # 2.

Avez-vous une idée ?

Merci

//+------------------------------------------------------------------+

//| Closing_Trade_By_Magic_No_v1 .mq4 |

//| Mine |

//| Logiciel de trading Forex : Plateforme de trading Forex MetaTrader 4 |

//+------------------------------------------------------------------+

#property copyright "Mine"

#property link "http://www.metaquotes.net"

//---- paramètres d'entrée

extern int MagicNumber1=8675310 ;

extern int Profit1=10 ;

extern int MagicNumber2=8675311 ;

extern int Profit2=15 ;

extern int MagicNumber3=8675312 ;

extern int Profit3=15 ;

extern int MagicNumber4=8675313 ;

extern int Profit4=15 ;

extern int MagicNumber5=8675314 ;

extern int Profit5=15 ;

extern int MagicNumber6=0 ;

extern int Profit6=10 ;

//+------------------------------------------------------------------+

//| fonction d'initialisation de l'expert |

//+------------------------------------------------------------------+

int init()

{

onScreenComment(98, "Tengak Initialize..") ;

//----

//----

return(0) ;

}

//+------------------------------------------------------------------+

//| fonction de désinitialisation experte |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0) ;

}

//+------------------------------------------------------------------+

//| fonction de démarrage expert |

//+------------------------------------------------------------------+

int start()

{

string myMessage="" ;

monMessage = monMessage + ProfitLossMonitor(1,MagicNumber1,Pr ofit1,monMessage) ;

monMessage = monMessage + ProfitLossMonitor(2,MagicNumber2,Pr ofit2,monMessage) ;

monMessage = monMessage + ProfitLossMonitor(3,MagicNumber3,Pr ofit3,monMessage) ;

monMessage = monMessage + ProfitLossMonitor(4,MagicNumber4,Pr ofit4,monMessage) ;

monMessage = monMessage + ProfitLossMonitor(5,MagicNumber5,Pr ofit5,monMessage) ;

monMessage = monMessage + ProfitLossMonitor(6,MagicNumber6,Pr ofit6,monMessage) ;

onScreenComment(98,monMessage) ;

//----

//----

return(0) ;

}

string ProfitLossMonitor(int myGroupNumber,int myMagicNumber, int myProfit,string myMessage )

{

int total = OrdersTotal() ;

double MyCurrentProfit=0 ;

string MyOrderNo="" ;

for (int cnt = 0 ; cnt < total ; cnt++)

{

OrderSelect(cnt,SELECT_BY_POS,MODE_ TRADES) ;

si (OrderMagicNumber() == monNombreMagique)

{

MonProfitCourant += OrderProfit() ;

MyOrderNo= MyOrderNo + "," + OrderTicket() ;

}

}

si(MonBénéficeCourant>=MonBénéfice)

CloseAll(monNuméroMagique) ;

myMessage="Position de groupe #" + myGroupNumber + " " + myMagicNumber + "=" + myProfit + "(" + DoubleToStr(MyCurrentProfit,2) + " " + MyOrderNo + ")" + "\n" ;

retourner (monMessage) ;

}

void CloseAll(int myMagicNumber)

{

int total = OrdersTotal() ;

for (int cnt = 0 ; cnt < total ; cnt++)

{

OrderSelect(cnt,SELECT_BY_POS,MODE_ TRADES) ;

if (OrderMagicNumber() == monNombreMagique)

if(OrderType()==OP_BUY)

OrderClose(OrderTicket(),OrderLots( ),Bid,5,Violet) ;

si(OrderType()==OP_SELL)

OrderClose(OrderTicket(),OrderLots( ),Ask,5,Violet) ;

}

}

void onScreenComment(int myEvent, string myComment)

{

switch (myEvent)

{

cas 98 : Commentaire(monComment) ; rupture ;

}

}

//+------------------------------------------------------------------+

Modifier/supprimer un message

 
Le problème avec cet EA est le suivant :

Open Transaction # 1 EURUSD (able to close)

Ouvrir la transaction # 2 USDCFh (ne pourra pas être fermée)

IL NE SERA PAS POSSIBLE DE FERMER LA TRANSACTION N° 2.

Avez-vous une idée ?

Je suppose que vous exécutez l'application sur le graphique EURUSD au moment où vous essayez de fermer les ordres, car ces positions se ferment bien. Lorsque votre code essaie de fermer les positions USDCHF(un peu désorientées ?), il utilise le mauvais bid ou ask, le prix de clôture qu'il utilise est celui de la paire de devises à laquelle l'application est attachée et non le prix du symbole de la position. Si vous essayez de fermer une autre paire de devises à partir d'un graphique qui ne correspond pas à cette devise, vous devez d'abord retrouver le prix correct avant d'essayer de la fermer.

keit

edit : La devise, USDCHF dans ce cas, doit également être affichée dans votre fenêtre de surveillance du marché au moment où vous essayez de récupérer les cotations correctes pour fermer les ordres. Si l'USDCHF n'est pas listé dans la fenêtre de surveillance du marché, vous ne serez pas en mesure d'obtenir des cotations pour cette paire.

 

Merci cockeyedcowboy !

"vous devez d'abord retrouver le prix correct avant d'essayer de le fermer".

Pourriez-vous partager la syntaxe ou la fonction qui peut faire les besoins ci-dessus ;

 

comment ne pas trader jusqu'à la prochaine barre

J'ai essayé de programmer pour la première fois, mais j'ai un problème.

- Si je ferme une transaction dans une barre, je ne peux ouvrir une nouvelle transaction que lorsque la nouvelle barre s'ouvre.

J'ai essayé ce qui suit ;

datetime time0=0 ;

int start()

si (time0 == Time[0]) return ;

{

"code du programme"

}

time0 = Time[0] ;

return(0) ;

Si j'enlève cette partie, j'obtiens des entrées multiples dans différentes barres. Avec cette partie, j'obtiens beaucoup moins d'entrées (de 70 dans un backtest. à 4), mais avec des entrées manquantes.

Quelqu'un sait-il ce que je fais mal ?

Merci d'avance.

 

Vous pouvez utiliser la fonction NewBar() ci-dessous..

Comme if(NewBar(){ ........programmation ici

bool NewBar() {

static datetime LastTime = 0;

if (Time[0] != LastTime) {

LastTime = Time[0];

return (true);

} else

return (false);

}

Vous pouvez également tester les ordres ouverts si vous ne voulez qu'un seul ordre à la fois.

J'espère que cela vous aidera.

Lux

 

Lux

Merci pour votre aide.

Je pense que j'ai compris ce qui se passait dans le programme.

Je vérifiais auparavant la présence d'une nouvelle barre au début, et le programme vérifiait simplement le premier tick de la nouvelle barre pour voir s'il correspondait à mes signaux, sans vérifier les autres ticks. C'est la raison pour laquelle peu de signaux de transaction ont été émis lors du backtest.

J'ai maintenant placé le code correctement (c'est-à-dire à l'endroit où se trouve mon instuction ordersend) et il semble fonctionner correctement.

Est-ce que je suis correct dans ma façon de penser ?

 

Aidez-nous à mettre à jour le code de l'expert.

Il y a un expert simple. Le code est clair et simple aussi, mais j'ai un gros problème - l'expert n'a qu'UNE seule tentative pour ouvrir/fermer l'ordre.

Quelqu'un peut-il m'aider à le corriger ?

L'expert doit essayer 5-10 fois d'ouvrir/fermer l'ordre.

Peut-être n=nombre d'essais, et s'il vous plaît sans "while".

Merci beaucoup.

Dossiers :
test.mq4  9 kb
 

Mon code pour 'ajuster les lots après la perte', besoin d'aide..merci

Mon code ci-dessous pour 'ajuster les lots après la perte', mais il a fait un massage d'erreur"position de départ incorrecte 0 pour la fonction ArraySort" pendant le test. Quelqu'un peut m'aider à le corriger ? besoin d'aide...

double AdjtLotsByWinRate( int magicnumber,double NormLots)

{

int i,counter;

int ProfitAndTime[][2];

double Profits[];

//----

ArrayResize(ProfitAndTime,OrdersHistoryTotal());

for (i=0;i<OrdersHistoryTotal();i++)

{

if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))

{

if (OrderType()<=OP_SELL && OrderMagicNumber()==magicnumber ) // 0 OP_BUY 1 OP_SELL 2 OP_BUYLIMIT 3 OP_SELLLIMIT 4 OP_BUYSTOP 5 OP_SELLSTOP

{

ProfitAndTime[counter][0]=OrderCloseTime();

ProfitAndTime[counter][1]=OrderProfit();

counter++;

}

}

}

ArrayResize(ProfitAndTime,counter);

ArrayResize(Profits,counter);

ArraySort(ProfitAndTime);

for (i=0;i<counter;i++)

{

Profits=ProfitAndTime[1];

}

//Print(Profits);

int err=GetLastError();

int WinRate_N=0,WinRate_A=5;

double WinRate;

for (i=counter;i<counter-WinRate_A+1;i--)

{

if (Profits>0){

WinRate_N=WinRate_N+1;

}

else if (Profits<0)

{

WinRate_N=WinRate_N-1;

}

else

{

WinRate_N=WinRate_N+0;

}

}

WinRate=WinRate_N/WinRate_A;

double NewLots;

if (WinRate>=0.7)

{

NewLots=NormLots*1.5;

}

else if (WinRate>=0.5 && WinRate<0.7)

{

NewLots=NormLots*1;

}

else if (WinRate>=0.3 && WinRate<0.5)

{

NewLots=NormLots*0.5;

}

else //if (WinRate<0.3)

{

NewLots=NormLots*0.1;

}

return(NewLots);

}