[Archive] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 2. - page 69

 
S'il vous plaît, que quelqu'un regarde mon message précédent (à la page 67). Je ne trouve pas l'erreur - les ordres en attente ne sont pas définis.
 
nemo811:
S'il vous plaît, que quelqu'un regarde mon message précédent (à la page 67). Je ne trouve pas l'erreur - les ordres en attente ne sont pas définis.

Il n'y a pas d'erreur. Tu devrais être plus prudent.

#property copyright "Copyright © 2010, Хлыстов Владимир"
#property link "cmillion@narod.ru"
#property show_inputs
//--------------------------------------------------------------------
extern int stoploss = 0; //уровень выставления SL, если 0, то SL не выставляется
extern int takeprofit = 0; //уровень выставления TP, если 0, то TP не выставляется
extern int Magic = 123456; //уникальный номер ордера
extern bool BUY = false; //открыть ордер BUY
extern bool SELL = false; //открыть ордер SELL
extern bool BUYSTOP = false; //открыть ордер BUYSTOP
extern bool SELLSTOP = false; //открыть ордер SELLSTOP
extern double Lot = 0.1; //объем ордера
extern int slippage = 3; //Максимально допустимое отклонение цены для рыночных ордеров
//--------------------------------------------------------------------
double SL,TP;
//--------------------------------------------------------------------
int start()
{
if (BUY)
{
if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); else SL=0; 
OPENORDER ("Buy");
}
if (SELL)
{ 
if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Bid + stoploss*Point,Digits); else SL=0; 
OPENORDER ("Sell");
}
if (BUYSTOP)
{
if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); else SL=0; 
OPENORDER ("Buy Stop");
}
if (SELLSTOP)
{ 
if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Bid + stoploss*Point,Digits); else SL=0; 
OPENORDER ("Sell Stop");
}
return(0);
}
//--------------------------------------------------------------------
void OPENORDER(string ord)
{
int error,err;
while (true)
{ error=true;
if (ord=="Buy" ) error=OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),slippage,SL,TP,"BUY",Magic,0,Blue);
if (ord=="Sell") error=OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),slippage,SL,TP,"SELL",Magic,0,Red);
if (ord=="BuyStop" ) error=OrderSend(Symbol(),OP_BUYSTOP, Lot,NormalizeDouble(Ask,Digits),SL,TP,"BUYSTOP",Magic,0,Blue);
if (ord=="SellStop") error=OrderSend(Symbol(),OP_SELLSTOP,Lot,NormalizeDouble(Bid,Digits),SL,TP,"SELLSTOP",Magic,0,Red);
if (error==-1) //неудачная покупка OK
{ 
ShowERROR();
err++;Sleep(2000);RefreshRates();
}
if (error || err >10) return;
}
return;
} 
//--------------------------------------------------------------------
void ShowERROR()
{
int err=GetLastError();
switch ( err )
{ 
case 1: return;
case 2: Alert("Нет связи с торговым сервером ",Symbol());return;
case 3: Alert("Error неправильные параметры ",Symbol());return;
case 130: Alert("Error близкие стопы Ticket ",Symbol());return;
case 134: Alert("Недостаточно денег ",Symbol());return;
case 146: Alert("Error Подсистема торговли занята ",Symbol());return;
case 129: Alert("Error Неправильная цена ",Symbol());return;
case 131: Alert("Error Неправильный объем ",Symbol());return;
case 4200:Alert("Error Объект уже существует ",Symbol());return;
default: Alert("Error ",err," ",Symbol());return;
}
}
//--------------------------------------------------------------------
 
gince:

Il n'y a pas d'erreur. Vous devez être plus prudent


Non, non, non, non. Vous regardez le mauvais poste. Il y en a un autre juste en dessous :)). La version que vous avez vérifiée ne spécifie pas le niveau à partir du prix actuel (seulement le prix actuel) auquel le pendule doit être réglé. Merci pour vos commentaires.
 
nemo811:

Non, non, non. Vous avez regardé un mauvais poste. Il y en a un autre juste en dessous :)). La version que vous avez vérifiée ne contient pas le niveau du prix actuel (seulement le prix actuel), auquel le pendentif doit être fixé. Merci pour vos commentaires.

Quelque chose avec l'appel de la fonction OPENORDER() ou la fonction elle-même.

Cela fonctionne comme suit

si (BUYSTOP)

{

si (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits) ; sinon TP=0 ;

si (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits) ; sinon SL=0 ;

int error=OrderSend(Symbol(),OP_BUYSTOP, Lot,NormalizeDouble(Ask + DistanceSet*Point,Digits),slippage,SL,TP,"",Magic,0) ;

}

 
gince:

Quelque chose avec l'appel de la fonction OPENORDER() ou la fonction elle-même.

Cela fonctionne comme suit

si (BUYSTOP)

{

si (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits) ; sinon TP=0 ;

si (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits) ; sinon SL=0 ;

int error=OrderSend(Symbol(),OP_BUYSTOP, Lot,NormalizeDouble(Ask + DistanceSet*Point,Digits),slippage,SL,TP,"",Magic,0) ;

}


Aaaaaaaaah !!! Dieux de l'informatique ! !! Je l'ai parcouru dix fois ! Pourquoi ça ne marche pas ? ! L'essentiel est l'ouverture du marché. Ceux qui sont en suspens sont rédigés exactement sur le même principe. Que manque-t-il ? :)))))))
 

Veuillez indiquer comment insérer TrailingStopFrCnSAR_v2 dans Expert Advisor, ce qui est décrit dans le tutoriel ?

Comment désactiver le suivi des ordres, afin qu'il fonctionne lorsqu'un autre EA place un ordre en attente ou ouvre un ordre ?

Dossiers :
 

Urrrrrrra !!!!!!!! J'ai trouvé le bug !

Si quelqu'un est intéressé, voici une version fonctionnelle :

#property copyright "Copyright © 2010, Khlystov Vladimir"
#p

lien de propriété "cmillion@narod.ru"
#property show_inputs
//--------------------------------------------------------------------
extern int stoploss = 0 ; //niveau d'exposition du SL, si 0, le SL n'est pas exposé.
extern int int takeprofit = 0 ; //t niveau de TP, si 0, TP n'est pas exposé
extern int Magic = 123456 ; //numéro d'une commande
extern bool BUY = false ; //ouverture de l'ordre BUY
extern bool SELL = false ; //ouverture de l'ordre SELL
extern bool BUYSTOP = false ; //ouverture de l'ordre BUYSTOP
extern bool SELLSTOP = false ; //ouverture de l'ordre SELLSTOP
extern double Lot = 0.1 ; // volume d'ordre
extern int slippage = 3 ; //écart de prix maximal autorisé pour les ordres au marché
extern int DistanceSet = 20 ; //Distance du marché
//--------------------------------------------------------------------
double SL,TP ;
//--------------------------------------------------------------------
int start()
{
si (BUY)
{
si (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits) ; sinon TP=0 ;
si (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits) ; sinon SL=0 ;
OPENORDER ("Acheter") ;
}
si (VENTE)
{
si (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits) ; sinon TP=0 ;
si (stoploss!=0) SL = NormalizeDouble(Bid + stoploss*Point,Digits) ; sinon SL=0 ;
OPENORDER ("Vendre") ;
}
si (BUYSTOP)
{
si (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits) ; sinon TP=0 ;
si (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits) ; sinon SL=0 ;
OPENORDER ("Buy Stop") ;
}
si (SELLSTOP)
{
si (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits) ; sinon TP=0 ;
si (stoploss!=0) SL = NormalizeDouble(Bid + stoploss*Point,Digits) ; sinon SL=0 ;
OPENORDER ("Sell Stop") ;
}
retour(0) ;
}
//--------------------------------------------------------------------
void OPENORDER(string ord)
{
int error,err ;
while (true)
{ error=true ;
si (ord=="Buy" ) error=OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),slippage,SL,TP,"",Magic,0) ;
si (ord=="Sell") error=OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),slippage,SL,TP,",Magic,0) ;
si (ord=="Buy Stop" ) error=OrderSend(Symbol(),OP_BUYSTOP, Lot,NormalizeDouble(Ask + DistanceSet*Point,Digits),slippage,SL,TP,"",Magic,0) ;
si (ord=="Sell Stop") error=OrderSend(Symbol(),OP_SELLSTOP,Lot,NormalizeDouble(Bid - DistanceSet*Point,Digits),slippage,SL,TP,",Magic,0) ;
if (error==-1) //échec
{
ShowERROR() ;
err++;Sleep(2000);RefreshRates() ;
}
si (erreur || err >10) retour ;
}
retour ;
}
//--------------------------------------------------------------------
void ShowERROR()
{
int err=GetLastError() ;
switch ( err )
{
cas 1 : retour ;
cas 2 : Alert("No connection to the trade server ",Symbol());return ;
cas 3 : Alert("Erreur paramètres incorrects ",Symbol());return ;
cas 130 : Alert("Error close Ticket stops ",Symbol());return ;
cas 134 : Alert("Pas assez d'argent ",Symbol());return ;
cas 146 : Alert("Error Trade Subsystem is busy ",Symbol());return ;
cas 129 : Alert("Error Wrong price ",Symbol());return ;
cas 131 : Alert("Error Incorrect volume ",Symbol());return ;
cas 4200:Alert("Erreur L'objet existe déjà ",Symbol());return ;
défaut : Alert("Error ",err," ",Symbol());return ;
}
}
//--------------------------------------------------------------------

Merci beaucoup à tous ceux qui ont participé à la discussion ! !! Nulle part sans toi ! :)))))

 
nemo811:

Urrrrrrra !!!!!!!! J'ai trouvé l'erreur !


Un grand merci à tous ceux qui ont participé à la discussion ! !! Nulle part sans toi ! :)))))

vous avez toujours une erreur dans votre code.

N'oubliez pas : les arrêts et les prises dans les ordres en attente ne sont pas comptés à partir du prix actuel, mais à partir du prix d'ouverture de l'ordre.

 

AIDE ! Dites-moi, s'il vous plaît, si je ferme une partie d'une position (par exemple, un ordre pour 1 lot, et fermer 0,5 lot) le ticket OrderClose doit changer ? Mon testeur dit que c'est le cas... Comment l'éviter ? Voici un morceau de code de fermeture...

1 2011.01.31 06:57 vendre 1 2.55 1.36177 0.00000 0.00000 0.00 10000.00
2 2011.01.31 08:10 fermer 1 0.51 1.36039 0.00000 0.00000 70.38 10070.38
3 2011.01.31 08:10 vendre 2 2.04 1.36177 0.00000 0.00000 0.0000 10070.38
4 2011.01.31 08:10 fermer 2 0.40 1.36038 0.00000 0.00000 55.60 10125.98
5 2011.01.31 08:10 vendre 3 1.64 1.36177 0.00000 0.00000 0.00000 10125.98

Autre question : je veux diviser mon ordre en 4 parties et fermer chacune d'entre elles lorsque Cls_S==vrai se déclenche. J'ai essayé d'utiliser le compteur... Ça ne marche pas...

Quelqu'un peut-il me donner une idée ?

Merci d'avance !!!!

if (Tip==1 && ((Cls_S0==vrai&&TotClS==0)||(Cls_S1==vrai&&TotClS==1)
||(Cls_S2==vrai&&TotClS==2)||(Cls_S3==vrai&&TotClS==3)) // Un ordre de vente est ouvert.
{ // et il existe un critère pour le fermer
Alert("Attempting to close 0.2 Lot Sell ",Ticket,". En attente de réponse...") ;
RefreshRates() ; // Rafraîchit les données
Ans=OrderClose(Ticket,LotCt,Ask,5) ;

if (Ans==true) // Cela a marché :)
{
TotClS++ ;
Alert ("Closed 0.2 Lot Sell ",Ticket) ;
break ; // Sortie de la boucle fermée
}
if (Fun_Error(GetLastError())==1) // Gestion des erreurs
continue ; // Réessayer
return ; // Sortie de start()
}
break ; // Sortie de while

 
gince:
J'ai fait un dessin temporaire du tampon flag[] - il est vide, mais pourquoi ? Où est mon erreur ?
Je ne sais pas. Sergeev le sait, il dit que ça semble être juste. J'aimerais aussi voir comment l'écrire correctement.
Je l'ai juste corrigé un peu, pour que ça montre quelque chose.
- Je mets l'indicateur dans une fenêtre séparée, alors vous pouvez le remettre

- Le tableau macd[] était suspendu dans l'air, il est devenu un indicateur, ce qui a augmenté la précision.
- Fixe ta condition complexe pour ouvrir, mets une condition simple pour régler
- a changé la condition pour le drapeau, donc au moins ça marche.

Ensuite, vous pouvez introduire progressivement des conditions, vous verrez immédiatement où se trouve le bug.

Dossiers :
Raison: