Demandez ! - page 135

 
Kalenzo:
Je pense que vous compliquez trop les choses. Essayez d'utiliser quelques parties de code plus courtes au lieu d'une grande fonction. Cela devrait vous donner un indice :

Je vous remercie pour votre aide. J'ai essayé d'ajouter le code que vous avez dit, mais pour vous dire honnêtement, je suis perdu. Après avoir ajouté le code, l'EA montre une série de problèmes. J'ai parcouru la syntaxe mais je suis perdu.

J'ai aussi une question sur l'utilisation de fonctions à l'intérieur de la fonction int start(). Est-ce autorisé ? Les variables initialisées dans une fonction ne peuvent-elles pas être vues par d'autres fonctions ?

Donc

int start()

{

function( int x)

{

// Faire quelque chose

return(x)

}

// Faire quelque chose ... "Peut-on appeler x dans la fonction start() ?

return0 ;

}

J'ai joint la source de mon EA. Votre aide est très appréciée.

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

//| CCCCCCCCIEA.mq4 aka 8xCIEA.mq4 |

//| By CuTzPR |

//|------------------------------------------------------------------+

#property copyright "CuTzPR@Forex-TSD"

//---- input parameters

extern double Risk_Percent=10;

extern bool Turned_On=true;

extern bool Allow_Risk=false;

extern bool TimeFilter=false;

extern double FromHourTrade=0; //Adjust for Broker GMT Time

extern double ToHourTrade=23; //Adjust for Broker GMT Time

extern double TP=20; // Take Profit Level

extern int MaxLong=5,MaxShort=5;

extern int MaxOpenOrders=10;

extern double Magic=10000;

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

//| expert start function |

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

int start()

{

int ticket;

double Lots;

bool Canopen,BlockTrade;

double Poin; // This variable was included to solve the problem where some brokers use 6 digit quotes instead of 5

static datetime timeprev; // Portion of coded was added to alloy only one trade per bar.

datetime CMT; //Close time of last trade

int total=OrdersTotal();

double Spread=Ask-Bid;

//This portion of code was added to only allow one trade per bar.

if(timeprev==Time[0])

{

return(0); //only execute on new bar

}

else if (timeprev==0)

{

timeprev=Time[0]; // do nothing if freshly added to chart

return(0);

}

else

{

timeprev=Time[0];

}

// End of alllow one trade per bar code

//*****Following code was added to control the Risk per trade.

if (Allow_Risk==true)

Lots=MathCeil(AccountFreeMargin() * Risk_Percent / 10000) / 10;

else Lots=0.1;

//End of Risk Code

//The following code was also included to solve the 6 digit broker quoting

if (Point == 0.00001) Poin = 0.0001; //6 digits

else if (Point == 0.001) Poin = 0.01; //3 digits (for Yen based pairs)

else Poin = Point; //Normal

//End Point Code

// Custom Functions

double cci=iCCI(NULL,PERIOD_M5,5,PRICE_TYPICAL,0);

double SATL=iCustom(NULL,PERIOD_H1,"$SATL",0,1);

// End of Custom Function

//Start of total count of open Long and Short Orders.

int totalOrders (totalBuy)

{

int totalNumber= 0;

for (int cnt = total ; cnt >=0 ; cnt-- )

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if (OrderMagicNumber() == Magic && OrderType() == OP_BUY)

totalNumber++;

}

return (totalNumber);

}

int totalOrders (totalSell)

{

int totalNumber = 0;

for (int cnt = total ; cnt >=0 ; cnt-- )

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if (OrderMagicNumber() == Magic && OrderType() == OP_SELL)

totalNumber++;

}

return(totalNumber);

}

int totalBuy = totalOrders(totalBuy);

int totalSell = totalOrders(totalSell);

int EAopenOrders=totalBuy+totalSell;

//End of total Open Long and Short count code

// Time filter Code

if (TimeFilter==true)

{

if (!(Hour() >= FromHourTrade && Hour() <= ToHourTrade && Minute() <=2))

BlockTrade=true;

else BlockTrade=false;

}

//End of time Filter code

// Are trades allowed to be opened?

if(EAopenOrders<=MaxOpenOrders && BlockTrade==false && Turned_On==true)

Canopen=true;

else if(EAopenOrders>MaxOpenOrders || BlockTrade==true || Turned_On==false)

Canopen=false;

// End of Allow code

//*****Trade Open Order Functions

if(Canopen==true)

{

if (totalBuy<=MaxLong)

{

if (cci>-100 && SATL<Ask)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"CCI0",Magic,0,Blue);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("BUY order opened : ",OrderOpenPrice());

}

else Print ("Error opening BUY order : ",GetLastError());

return (0);

}

}

else if (totalSell<=MaxShort)

{

if (cciBid)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"CCI",Magic,0,Red);

if (ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print ("Sell order opened : ",OrderOpenPrice());

}

else Print("Error opening SELL Order : ",GetLastError());

return (0);

}

}

}// End of Trade Open Order Functions

//****Close Orders if they are profitable

for (int cnt = total ; cnt >=0 ; cnt-- )

{

OrderSelect(0,SELECT_BY_POS,MODE_TRADES);

if (OrderMagicNumber()==Magic)

{

if(OrderType()==OP_BUY && TP != 0 && totalBuy!= 0)

{

if(Bid >= ((OrderOpenPrice()+TP*Poin)+Spread))

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Green); // Long position closed.

CMT=OrderCloseTime();

return(0);

}

}

}

if (OrderMagicNumber()==Magic)

{

if(OrderType()==OP_SELL && TP != 0 && totalSell!=0 )

{

if(Ask <= ((OrderOpenPrice()-TP*Poin)+Spread))

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Green); // Short position closed.

CMT=OrderCloseTime();

return(0);

}

}

}

} // Close Profitable trades loop closed

}// End of Start function

Votre aide est très appréciée.

 
Limstylz:
Bonjour à tous,

À l'origine, j'ai publié ce message dans un nouveau fil de discussion, mais il a été déplacé dans un autre fil de discussion sur la programmation (je n'ai aucune objection à son déplacement, d'ailleurs) et il semble maintenant s'être perdu en raison du nombre d'affiches dans ce fil.

Peut-être que quelqu'un ici peut m'aider ?

Limstylz, jetez un coup d'œil à ce fil de discussion Ask ! page 39. Je pense qu'il pourrait y avoir des informations qui pourraient vous aider. Bonne chance

 

Merci mon pote...

cutzpr:
Limstylz, jetez un œil à ce fil de discussion Ask ! page 39. Je pense qu'il pourrait y avoir des informations qui pourraient vous aider. Bonne chance

Merci cutzpr, mais j'ai déjà réussi à faire le tri... cette foutue connexion internet a été interrompue toute la journée et j'ai dû utiliser mes propres neurones pour une fois.

Quoi qu'il en soit, pour répondre à votre question sur l'int start ()... C'est le corps principal de l'EA et il est mis à jour continuellement, chaque tick (je pense que c'est correct).

Votre code est un peu déconcertant... pouvez-vous expliquer où vous rencontrez un problème ? Je pourrais être en mesure d'aider si vous pouvez décomposer les problèmes, même si je ne fais qu'apprendre MQL4 moi-même.

 

Quel est le problème ?

Quelqu'un ici pourrait-il m'aider, si je copie cet indicateur dans ma méta, j'ai besoin de plus de 5 minutes juste pour ouvrir ma méta. Mais quand je le supprime, et que je rouvre ma méta, il redevient normal.

Dossiers :
 

Merci !!! C'est génial !

 

Retour à la planche à dessin

 

Indicateur personnalisé incorporé dans un conseiller expert

Bonjour, quelqu'un sait-il comment ajouter l'indicateur personnalisé ci-dessous dans un conseiller expert ? De sorte que nous n'ayons pas besoin d'utiliser l'icustom pour l'appeler depuis le fichier ?

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

//| ARSI.mq4

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

#property copyright "Alexander Kirilyuk M."

#property link ""

#property indicator_separate_window

//#property indicator_chart_window

#property indicator_buffers 1

#property indicator_color1 DodgerBlue

extern int ARSIPeriod = 14;

//---- buffers

double ARSI[];

int init()

{

string short_name = "ARSI (" + ARSIPeriod + ")";

SetIndexStyle(0,DRAW_LINE);

SetIndexBuffer(0,ARSI);

//SetIndexDrawBegin(0,ARSIPeriod);

return(0);

}

int start()

{

int i, counted_bars = IndicatorCounted();

int limit;

if(Bars <= ARSIPeriod)

return(0);

if(counted_bars < 0)

{

return;

}

if(counted_bars == 0)

{

limit = Bars;

}

if(counted_bars > 0)

{

limit = Bars - counted_bars;

}

double sc;

for(i = limit; i >= 0; i--)

{

sc = MathAbs(iRSI(NULL, 0, ARSIPeriod, PRICE_CLOSE, i)/100.0 - 0.5) * 2.0;

if( Bars - i <= ARSIPeriod)

ARSI = Close;

else

ARSI = ARSI + sc * (Close - ARSI);

}

Print ("Try2 : " , ARSI[0], ":", ARSI[1]);

return(0);

}
 
yast77:
Bonjour, quelqu'un sait-il comment ajouter l'indicateur personnalisé ci-dessous dans un conseiller expert ? Ainsi, nous n'avons pas besoin d'utiliser l'icustom pour l'appeler à partir du fichier ?
//+------------------------------------------------------------------+

//| ARSI.mq4

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

#property copyright "Alexander Kirilyuk M."

#property link ""

#property indicator_separate_window

//#property indicator_chart_window

#property indicator_buffers 1

#property indicator_color1 DodgerBlue

extern int ARSIPeriod = 14;

//---- buffers

double ARSI[];

int init()

{

string short_name = "ARSI (" + ARSIPeriod + ")";

SetIndexStyle(0,DRAW_LINE);

SetIndexBuffer(0,ARSI);

//SetIndexDrawBegin(0,ARSIPeriod);

return(0);

}

int start()

{

int i, counted_bars = IndicatorCounted();

int limit;

if(Bars <= ARSIPeriod)

return(0);

if(counted_bars < 0)

{

return;

}

if(counted_bars == 0)

{

limit = Bars;

}

if(counted_bars > 0)

{

limit = Bars - counted_bars;

}

double sc;

for(i = limit; i >= 0; i--)

{

sc = MathAbs(iRSI(NULL, 0, ARSIPeriod, PRICE_CLOSE, i)/100.0 - 0.5) * 2.0;

if( Bars - i <= ARSIPeriod)

ARSI = Close;

else

ARSI = ARSI + sc * (Close - ARSI);

}

Print ("Try2 : " , ARSI[0], ":", ARSI[1]);

return(0);

}

Vous devez utiliser la fonction iCustom dans votre EA pour appeler cet indicateur :

iCustom(Symbol(),0, "ARSI",ARSIPeriod,0,0) ;

Le numéro en rouge est la barre que vous voulez regarder. Modifiez-le selon vos besoins.

FerruFx

 
FerruFx:
Vous devez utiliser la fonction iCustom dans votre EA pour appeler cet indicateur :

iCustom(Symbol(),0, "ARSI",ARSIPeriod,0,0) ;

Le numéro en rouge est la barre que vous voulez regarder. Modifiez-le selon vos besoins.

FerruFx

Merci pour votre réponse. Ya, je sais que nous pouvons utiliser la fonction icustom, mais comme je le sais, nous pouvons intégrer la fonction de l'indicateur en entrant le codage de l'indicateur, le site Web suivant Indicators embedding in Expert Advisors (iCustom alternative) | www.metatrader.info qui a expliqué par codersguru décrire à ce sujet, mais pour l'indicateur ARSI, je ne sais pas comment l'intégrer dans un conseiller expert. Merci pour toute recommandation !

 

amélioration de 10points3

Bonjour à tous.

Nous essayons d'améliorer 10points3. Nous avons besoin de modifier le code pour fermer le dernier tiers de la transaction. Veuillez vous référer aux derniers messages ici :

https://www.mql5.com/en/forum/174975/page259.

Nous obtenons de bons résultats ici.

Raison: