Trader7777: double GetLastUpperFractalPrice() { for (int i = 3 ; i<=Bars ; i++) { if (iFractals(Symbol(),PERIOD_M5,MODE_UPPER,i) != 0) return (i) ; { double LastUpperFractalPrice = High [i] ; } } return (LastUpperFractalPrice) ;
}
Est-ce que ça va marcher ou pas ?
Non. Insérez le code à travers le SRC du panneau.
return (ХХХ) retournera de la fonction utilisateur - ce qui a été entré là sera retourné par cette fonction - la valeur de ХХХ ou un résultat de certaines fonctions de calcul.
Ainsi, lorsqu'une fractale est trouvée, on écrit return (High [i]) - il n'est pas nécessaire d'inventer autre chose.
Il s'agit d'une fonction élémentaire de placement d'ordres en attente, les paramètres ne sont pas importants, mais il est important de faire en sorte que le conseiller expert (il peut utiliser la boucle existante d'ordres en attente) après avoir reçu un "nouveau prix" ou pour réinitialiser ou autrement éviter de placer des ordres au même prix. Dans ce cas, la boucle de passation des ordres ne doit pas s'arrêter.
double Dist=10000.0 ; chaîne SMB ; double NewPrice ; int i ; int start() { RefreshRates() ; SMB=Symbole() ; {UstanOtlozh();} } retour(0) ; void UstanOtlozh() { double OldPrice=WindowPriceOnDropped() ; // Le script est lancé ici. RefreshRates() ; SMB=Symbole() ; { int i=1 ; while(i<=OrdersTotal()) { si (OrderSelect(i-1,SELECT_BY_POS)==true) // s'il existe un { // Analyse de l'ordre : if (OrderSymbol()!= SMB) continue ; // Pas notre instrument financier. int Tip=OrderType() ; // Type de commande if (Tip<2) continue ; // Ordre de marché double NewPrice=OrderOpenPrice() ; // Prix de la commande { while(NewPrice<=Ask+200*Point||NewPrice>=Ask+50*Point) { NewPrice=NewPrice+50*Point ; OrderSend(SMB,OP_BUYSTOP,0.01,NewPrice,3,0,0,NULL,0,CLR_NONE) ; if(NewPrice>Ask+200*Point||NewPrice<Ask+50*Point) pause ; }}}}}}
ALXIMIKS: Je l'ai réparé pour compiler - et utiliser 555 build de MT4 EDITOR - cela aide vraiment à trouver les problèmes rapidement. Il suffit de lire le manuel avant d'installer - les 15 premières pages.
Je n'aurais jamais cru que je demanderais une chose aussi simple. Lors de la compilation, je reçois un message indiquant que la fonction BU() n'est pas impliquée. Je l'ai mis de cette façon (le code est donné) maintenant tout compile, mais la fonction breakeven ne fonctionne pas. Il fonctionne dans d'autres EAs et il a la même fonction Breakeven.
int start()
{
if(Volume[0]>1) return;
if (CountTrades()==0 && Open[1]>Close[1] && Open[2]<Close[2] && High[1]>High[2] && Low[1]<Low[2]) // продажа
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"Pattern_1",111,0,Red);
if (OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES))
{
TP=NormalizeDouble(Bid - TakeProfit * Point, Digits);
OrderModify(ticket, OrderOpenPrice(),0,TP,0);
}
}
elseif (CountTrades()==0 && Open[1]<Close[1] && Open[2]>Close[2] && High[1]>High[2] && Low[1]<Low[2]) // покупка
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"Pattern_1",111,0,Blue);
if (OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES))
{
TP=NormalizeDouble(Ask + TakeProfit * Point, Digits);
OrderModify(ticket, OrderOpenPrice(),0,TP,0);
}
}
if (CountTrades()>0)
{
otype = FindLastOrderType();
if (otype == OP_BUY)
{ // ценапоследнего ордера на покупку
price = FindLastBayPrice();
if ((Bid - price) / Point >= Step)
{
ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid,Slippage,0,0,"Pattern_1",111,0,Red);
}
}
elseif (otype == OP_SELL)
{ // цена последнего ордера на продажу
price = FindLastSellPrice();
if ((price - Ask) / Point >= Step)
{
ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask,Slippage,0,0,"Pattern_1",111,0,Blue);
}
}
}
BU();
return(0);
}
Je n'aurais jamais cru que je demanderais une chose aussi simple. Lors de la compilation, je reçois un message indiquant que la fonction BU() n'est pas impliquée. Je l'ai mis de cette façon (le code est donné) maintenant tout compile, mais la fonction breakeven ne fonctionne pas. Dans d'autres EA, la fonction de seuil de rentabilité est exactement la même.
La seule raison est un retour incorrect de l'opérateur if(...) ; Il semble que vous n'en ayez qu'un seul - au début du programme.
La seule raison est un retour incorrect de l'opérateur if(...) ; Il semble que vous en ayez un - au début du programme.
Celui-ci a été supprimé. Mais le problème se situe ailleurs - dans la normalisation. Pour une raison quelconque, mon conseiller expert a lu 4 décimales, et non 5.
Si vous n'avez pas de compte, veuillez vous inscrire
Autorisez l'utilisation de cookies pour vous connecter au site Web MQL5.com.
Veuillez activer les paramètres nécessaires dans votre navigateur, sinon vous ne pourrez pas vous connecter.
Vous êtes connecté. L'authentification à deux facteurs a été désactivée. Configurez-la à nouveau et scannez un nouveau code QR, ou continuez avec l'authentification à deux facteurs désactivée.
{
for (int i = 3 ; i<=Bars ; i++)
if (iFractals(Symbol(),PERIOD_M5,MODE_UPPER,i) != 0) return (i) ;
double LastUpperFractalPrice = High [i] ; return (LastUpperFractalPrice) ;
}
c'est bien ça ? Cette fonction renverra-t-elle le prix de la dernière fractale supérieure?
Est-ce correct ? Cette fonction renverra-t-elle le prix de la dernière fractale supérieure ?
Exemple de recherche fractale
{
for (int i = 3 ; i<=Bars ; i++)
{
if (iFractals(Symbol(),PERIOD_M5,MODE_UPPER,i) != 0) return (i) ;
{
double LastUpperFractalPrice = High [i] ;
}
}
return (LastUpperFractalPrice) ;
}
Est-ce que ça va marcher ou pas ?
double GetLastUpperFractalPrice()
{
for (int i = 3 ; i<=Bars ; i++)
{
si (iFractals(Symbol(),PERIOD_M5,MODE_UPPER,i) != 0)
{
double LastUpperFractalPrice = High [i] ;
}
}
retourner (LastUpperFractalPrice ;)
}
Est-ce que ça va marcher ou pas ?
Donc, par exemple, il le fera :
Comme vous l'avez dit, ce ne sera pas le cas.
double GetLastUpperFractalPrice()
{
for (int i = 3 ; i<=Bars ; i++)
{
if (iFractals(Symbol(),PERIOD_M5,MODE_UPPER,i) != 0) return (i) ;
{
double LastUpperFractalPrice = High [i] ;
}
}
return (LastUpperFractalPrice) ;
}
Est-ce que ça va marcher ou pas ?
Non. Insérez le code à travers le SRC du panneau.
return (ХХХ) retournera de la fonction utilisateur - ce qui a été entré là sera retourné par cette fonction - la valeur de ХХХ ou un résultat de certaines fonctions de calcul.
Ainsi, lorsqu'une fractale est trouvée, on écrit return (High [i]) - il n'est pas nécessaire d'inventer autre chose.
Bien en avance sur vous))
Il s'agit d'une fonction élémentaire de placement d'ordres en attente, les paramètres ne sont pas importants, mais il est important de faire en sorte que le conseiller expert (il peut utiliser la boucle existante d'ordres en attente) après avoir reçu un "nouveau prix" ou pour réinitialiser ou autrement éviter de placer des ordres au même prix. Dans ce cas, la boucle de passation des ordres ne doit pas s'arrêter.
double Dist=10000.0 ;
chaîne SMB ;
double NewPrice ;
int i ;
int start()
{
RefreshRates() ;
SMB=Symbole() ;
{UstanOtlozh();}
}
retour(0) ;
void UstanOtlozh()
{
double OldPrice=WindowPriceOnDropped() ; // Le script est lancé ici.
RefreshRates() ;
SMB=Symbole() ;
{
int i=1 ;
while(i<=OrdersTotal())
{
si (OrderSelect(i-1,SELECT_BY_POS)==true) // s'il existe un
{ // Analyse de l'ordre :
if (OrderSymbol()!= SMB) continue ; // Pas notre instrument financier.
int Tip=OrderType() ; // Type de commande
if (Tip<2) continue ; // Ordre de marché
double NewPrice=OrderOpenPrice() ; // Prix de la commande
{
while(NewPrice<=Ask+200*Point||NewPrice>=Ask+50*Point)
{
NewPrice=NewPrice+50*Point ;
OrderSend(SMB,OP_BUYSTOP,0.01,NewPrice,3,0,0,NULL,0,CLR_NONE) ;
if(NewPrice>Ask+200*Point||NewPrice<Ask+50*Point)
pause ;
}}}}}}
Je l'ai réparé pour compiler - et utiliser 555 build de MT4 EDITOR - cela aide vraiment à trouver les problèmes rapidement. Il suffit de lire le manuel avant d'installer - les 15 premières pages.
Je n'aurais jamais cru que je demanderais une chose aussi simple. Lors de la compilation, je reçois un message indiquant que la fonction BU() n'est pas impliquée. Je l'ai mis de cette façon (le code est donné) maintenant tout compile, mais la fonction breakeven ne fonctionne pas. Il fonctionne dans d'autres EAs et il a la même fonction Breakeven.
Je n'aurais jamais cru que je demanderais une chose aussi simple. Lors de la compilation, je reçois un message indiquant que la fonction BU() n'est pas impliquée. Je l'ai mis de cette façon (le code est donné) maintenant tout compile, mais la fonction breakeven ne fonctionne pas. Dans d'autres EA, la fonction de seuil de rentabilité est exactement la même.
La seule raison est un retour incorrect de l'opérateur if(...) ; Il semble que vous n'en ayez qu'un seul - au début du programme.
Messieurs ! !! Qu'est-ce qui vous trouble ?
iFractals() renvoie le prix, et non le numéro de barre de la fractale.
La seule raison est un retour incorrect de l'opérateur if(...) ; Il semble que vous en ayez un - au début du programme.