Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 182
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
Et vous n'avez pas montré un seul morceau de votre code - la raison pour laquelle vous montrez un exemple n'est pas claire.
struct p{
double trailingProfit;
int orders[10];
bool flagOpen;// флаг , указывающий на открытость позиции
//тут еще куча связанных параметров
};
p order[];
int OrderN=-1;
int OnInit()
{
ArrayResize(pair,1,1000);
return(INIT_SUCCEEDED);
}
void openOrder(price){
OrderN++;
int t;
ArrayResize(orders,order+1);
t=OrderSend(Symbol(),OP_BUYSTOP,2,(NormalizeDouble(price,Digits)),3,0,0,"pair",MAGICN,0,Blue);
if(t==0) Print("не удалось выставить ордер BUYSTOP ", price);
for(intj=0,j<10,++j){
if(orders[OrderN].orders==0) orders[OrderN].orders=t;
break;
}
orders[OrderN].flagOpen=1;
}
//...... тут идет обработка позиций...
void massCut(){
// нужна вот такая функция
}
Qu'arrive-t-il au tableau de structures lorsque l'EA est redémarré ?
Qu'arrive-t-il au tableau de structure lorsque l'EA est redémarré ?
Le tableau sera supprimé, ce problème n'a pas été résolu.
Voilà. Et cela aurait dû être envisagé dès le départ.
La conclusion est évidente : le tableau doit être mis à zéro et rempli à nouveau avec l'état actuel des ordres et des positions. Mais cela ne doit être fait que lorsque vous constatez des changements dans le nombre d'ordres ou de positions sur le compte.
Vous n'aurez toujours sous la main que l'état actuel des ordres et des positions, et il ne sera pas nécessaire de se préoccuper d'éliminer les ordres/positions inexistants du tableau. Et la liste des ordres/positions devra être parcourue complètement, ou pour une période donnée de l'historique, mais seulement dans des cas spécifiques - lorsque le nombre d'ordres/positions dans le compte change.
Pourquoi avez-vous besoin d'une telle perversion ?
Pour que onInit ne tourne pas à chaque réinitialisation et réduise le tableau statique en une seule instance parce qu'à certains endroits il est écrit deux fois... en général, c'est une optimisation des ressources
... Je vais le laisser tel quel, c'est plus simple pour l'instant.
Vous déclarez un tableau global sans spécifier de taille. Votre fonction définit sa taille par ArrayResize. Et c'est visible globalement, et OnInit est libéré...
Pas tout à fait juste, le tableau est statique avec des valeurs clairement définies, cela n'a pas de sens de l'initialiser séparément(
pour éviter que OnInit ne tourne à chaque réinitialisation et pour réduire le tableau statique à une seule instance car à certains endroits, il est écrit deux fois... en général, c'est une optimisation des ressources.
... je vais laisser les choses telles qu'elles sont maintenant.
Les commissions ne sont-elles pas prises en compte dans le testeur MT4 ?
Question sur la fonction Print(); comment faire pour que Print() imprime les données plus la date (jour) dans l'EA ? aider un débutant à comprendre le plz, mettre le code refait pour le bien de l'expérience, induire "pivot" avant cbs !
le code lui-même : PivotsDaily v2.mq4
#property indicator_chart_window
#property indicator_buffers 3
#propriété indicator_color1 Lime
#property indicator_color2 Blue
#property indicator_color3 Red
//---- paramètres d'entrée
extern inttern CountBars=300 ;
//---- tampons
double PBuffer[] ;
double S1Buffer[] ;
double R1Buffer[] ;
chaîne Pivot="P", Sup1="S 1", Res1="R 1" ;
int fontsize=10 ;
double P,S1,R1,S2,R2,S3,R3 ;
double LastHigh,LastLow,x ;
//+------------------------------------------------------------------+
//| Fonction de désinitialisation de l'indicateur de dépôt |
//+------------------------------------------------------------------+
int deinit()
{
ObjectDelete("Pivot") ;
ObjectDelete("S1") ;
ObjectDelete("R1") ;
retour(0) ;
}
//+------------------------------------------------------------------+
//| Fonction d'initialisation de l'indicateur personnalisé |
//+------------------------------------------------------------------+
int init()
{
string short_name ;
IndicatorBuffers(7) ;
//---- ligne d'indicateurs
SetIndexStyle(0,DRAW_ARROW,2,1,Lime) ;
SetIndexArrow(0,158) ;
SetIndexStyle(1,DRAW_ARROW,2,1,Blue) ;
SetIndexArrow(1,158) ;
SetIndexStyle(2,DRAW_ARROW,2,1,Red) ;
SetIndexArrow(2,158) ;
SetIndexBuffer(0,PBuffer) ;
SetIndexBuffer(1,S1Buffer) ;
SetIndexBuffer(2,R1Buffer) ;
//---- nom pour la DataWindow et l'étiquette de la sous-fenêtre de l'indicateur
short_name="Pivot" ;
IndicatorShortName(nom_court) ;
SetIndexLabel(0,short_name) ;
short_name="R1" ;
IndicatorShortName(nom_court) ;
SetIndexLabel(2,nom_court) ;
short_name="S1" ;
IndicatorShortName(nom_court) ;
SetIndexLabel(1,nom_court) ;
SetIndexDrawBegin(0,6) ;
//----
retour(0) ;
}
//+------------------------------------------------------------------+
//| Fonction d'itération de l'indicateur personnalisé |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted() ;
int limite, i ;
//---- calcul de l'indicateur
si (counted_bars==0)
{
x=Période() ;
si (x>CountBars) return(-1) ;
ObjectCreate("Pivot", OBJ_TEXT, 0, 0,0) ;
ObjectSetText("Pivot", " Pivot",10, "Arial",Lime) ;
ObjectCreate("S1", OBJ_TEXT, 0, 0, 0) ;
ObjectSetText("S1", " S1",10, "Arial",Blue) ;
ObjectCreate("R1", OBJ_TEXT, 0, 0, 0) ;
ObjectSetText("R1", " R1",10, "Arial",Red) ;
}
si(counted_bars<0) return(-1) ;
limit=(Bars-counted_bars)-1 ;
pour (i=limite ; i>=0;i--)
{
si (TimeDayOfWeek(Time[i]) != 0)
{
si (High[i+1]>LastHigh) LastHigh=High[i+1] ;
si (Low[i+1]<LastLow) LastLow=Low[i+1] ;
}
si (
TimeDay(Time[i])!=TimeDay(Time[i+1]) && TimeDayOfWeek(Time[i])!=0
)
{
P=Close[i+1] ;
R1 = LastLow ;
S1 = LastHigh ;
S2=High[i]-Low[i] ;
S3=High[i]-Open[i+1];
si(S3==0)
{R2 = S3;} else {R2 = S2/S3;}
Print("R2 ",R2) ; // <= comment faire pour que l'imprimante plus les données impriment la date ?
LastLow=Open[i] ; LastHigh=Open[i] ;
ObjectMove("Pivot", 0, Time[i],P) ;
ObjectMove("S1", 0, Time[i],S1) ;
ObjectMove("R1", 0, Time[i],R1) ;
}
PBuffer[i]=P ;
S1Buffer[i]=S1 ;
R1Buffer[i]=R1 ;
}
//----
retour(0) ;
}