Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 38
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Puis passer l'argument à la fonction, puisqu'il est fourni. Bien qu'il soit préférable de le supprimer, c'est une tautologie.
Et tous les ordres dans la boucle ne seront pas recalculés.
Le ticket avec écrasement, en travaillant à partir de la dernière commande avec un Martin.
et ensuite comment supprimer la déclaration globale 'count' hides à la ligne...
il est intéressant de le faire fonctionner comme il se doit.
Jusqu'à présent, le testeur montre d'assez bons résultats, et parfois des "erreurs insurmontables dans l'Expert Advisor".
Salutations.
Je suis tombé par hasard sur un enregistrement dans ce format :
C'est-à-dire qu'ici l'instruction conditionnelle if a été remplacée par une fonction commerciale de type bool au lieu d'une expression. Ai-je bien compris qu'un tel écrit est égal à :
if(OrderSelect(ticket,SELECT_BY_TICKET))==true {OrderModify(ticket,OrderOpenPrice(), SL, TP,0};?
J'ai cherché à la fois dans l'aide et dans le tutoriel - je n'ai pas trouvé un tel format.
Puis-je utiliser cette méthode pour écrire directement des fonctions d'un type différent au lieu d'une expression ? Et si oui, quel serait l'algorithme ?
Je l'ai corrigé, j'ai mis un argument, je l'ai mis dans la portée globale, maintenant cela génère un avertissement que cet argument est déjà utilisé comme entrée dans d'autres fonctions
Ticket avec écrasement, travail de la dernière commande avec martin
et ensuite comment supprimer la déclaration de 'count' cache la déclaration globale à la ligne...
Il est intéressant de le faire fonctionner comme il se doit.
Jusqu'à présent, le testeur montre d'assez bons résultats, et parfois des "erreurs insurmontables dans l'Expert Advisor".
Salutations.
Je suis tombé par hasard sur un enregistrement dans ce format :
C'est-à-dire qu'ici l'opérateur conditionnel a été remplacé par une fonction commerciale de type bool au lieu d'une expression. Ai-je bien compris qu'un tel écrit est égal à :
if(OrderSelect(ticket,SELECT_BY_TICKET))==true {OrderModify(ticket,OrderOpenPrice(), SL, TP,0};?
J'ai cherché à la fois dans l'aide et dans le tutoriel - je n'ai pas trouvé un tel format.
Puis-je utiliser cette méthode pour écrire directement des fonctions d'un type différent au lieu d'une expression ? Si oui, quel serait l'algorithme ?
Comme cecisi(OrderSelect(ticket,SELECT_BY_TICKET))==true {OrderModify(ticket,OrderOpenPrice(), SL, TP,0}; ne fonctionnera pas. La condition ne doit pas être jetée hors des parenthèses.
Maissi(OrderSelect(ticket,SELECT_BY_TICKET)==true) {OrderModify(ticket,OrderOpenPrice(), SL, TP,0}; vous pouvez.
Tout commesi(OrderSelect(ticket,SELECT_BY_TICKET))==true {OrderModify(ticket,OrderOpenPrice(), SL, TP,0}; ne fonctionnera pas. La condition ne doit pas être jetée hors des parenthèses.
Maissi(OrderSelect(ticket,SELECT_BY_TICKET)==true) {OrderModify(ticket,OrderOpenPrice(), SL, TP,0}; vous pouvez.
S'il vous plaît, montrez-moi la version corrigée, car sans le code, c'est une supposition.
Ok.
J'ai en quelque sorte fini ce que je pouvais. La description est faite. Le but est de comprendre pourquoi il ne fonctionne pas comme je le voudrais.
//| ОТЛОЖКИ.mq4 |
//+------------------------------------------------------------------+
extern double StopLoss = 1000; //Стоплосс ордера
extern double TakeProfit = 1500; //Тейкпрофит ордера
extern double TrailingStop = 1000; // трал
extern int Delta = 100; //Расстояние от цены для установки ордера
extern double LOT = 0.1; //Объём позиции
extern int Magic =200;
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
if (TrailingStop!=0) Trailing();
//ИНДИКАТОР RSI
double RSI0=iRSI(NULL,0,5,PRICE_CLOSE,0);
double RSI1=iRSI(NULL,0,5,PRICE_CLOSE,1);
int b,s,p,res;
double BuyPrice=Ask+Delta*Point;
double SellPrice=Bid-Delta*Point;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS)==true)
{
if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
if (OrderType()==OP_BUY || OrderType()==OP_SELL) p++;
if (OrderType()==OP_BUYSTOP) b++;
if (OrderType()==OP_SELLSTOP) s++;
}
}
double SL,TP;
//---- buy stop
if(RSI0>50&&RSI1<50)
{
res=OrderSend(Symbol(),OP_BUYSTOP,LOT,BuyPrice,0,BuyPrice-StopLoss*Point,BuyPrice+TakeProfit*Point,"ОТЛОЖКИ",Magic,OP_SELLSTOP,Blue);
}
//---- sell stop
if(RSI0<50&&RSI1>50)
{
res=OrderSend(Symbol(),OP_SELLSTOP,LOT,SellPrice,0,SellPrice+StopLoss*Point,SellPrice-TakeProfit*Point,"ОТЛОЖКИ",Magic,OP_BUYSTOP,Red );
}
//---- buy stop делете
if(RSI0<50&&RSI1>50)
{
OrderDelete( OrderTicket());
}
//---- sell stop делете
if(RSI0>50&&RSI1<50)
{
OrderDelete( OrderTicket());
}
//----
return(0);
}
//--------------------------------------------------------------------
//---------ФУНКЦИЯ ТРАЛА----------------------------------------------
//--------------------------------------------------------------------
void Trailing()
{
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==Symbol()||OrderMagicNumber()==Magic)
if(OrderType()==OP_BUY)
{
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>TrailingStop)
{
if(OrderStopLoss()<Bid-TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop,OrderTakeProfit(),0,Green);
}
}
}
}
if(OrderType()==OP_SELL)
{
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>TrailingStop)
{
if((OrderStopLoss()>(Ask+TrailingStop)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop,OrderTakeProfit(),0,Red);
}
}
}
}
}
}
//+------------------------------------------------------------------------------------+
//+------------------------------------------------------------------------------------+--------------------------------------------------------------------+
et comment avez-vous obtenu le ticket pour la commande non ouverte ?
{
if (OrderSelect(i, SELECT_BY_POS)==true)
{
if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
if (OrderType()==OP_BUY || OrderType()==OP_SELL) p++;
if (OrderType()==OP_BUYSTOP)
if (сигнал_bue) OrderDelete(OrderTicket());
else b++;
if (OrderType()==OP_SELLSTOP)
if (сигнал_sell) OrderDelete(OrderTicket());
else s++;
}
}
C'est vrai ? Je n'arrive pas à le mettre là-dedans.
{
if (OrderSelect(i, SELECT_BY_POS)==true)
{
if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
if (OrderType()==OP_BUY || OrderType()==OP_SELL) p++;
if (OrderType()==OP_BUYSTOP)
if (сигнал_bue) OrderDelete(OrderTicket());
else b++;
if (OrderType()==OP_SELLSTOP)
if (сигнал_sell) OrderDelete(OrderTicket());
else s++;
}
}