Aide au codage - page 679

 
stevenpun:

Bonjour Mr Mladen,

Je pensais ajouter un commentaire lorsque le prix s'est inversé de la tendance et avoir "attendre pour acheter" et "attendre pour vendre".

L'ajout de la nouvelle ligne à l'achat ne pose aucun problème, mais lorsqu'on l'ajoute à la vente, cela ne fonctionne pas.

Que dois-je changer ?

Essayez comme ceci :

   string OPstr = "NO TRADE";;
   color  OPclr = clrYellow;
   if (buffer1[i+SignalCandle]>buffer5[i+SignalCandle]) 
      if (Bid < buffer1[i+SignalCandle] ) 
      {
         OPstr = "BUY";
         OPclr = clrGreen;
      }
      else
      {      
         OPstr = "WAIT FOR BUY";
         OPclr = clrLimeGreen;
      }       
   if (buffer1[i+SignalCandle]<buffer6[i+SignalCandle] ) 
      if (Bid > buffer1[i+SignalCandle] )
      {
         OPstr = "SELL";
         OPclr = clrRed;
      }
      else
      {
         OPstr = "WAIT FOR SELL";
         OPclr = clrOrangeRed;
      }        
 

Salut mladen,

J'essaie de combiner StepMA PDF et RSI comme ceci. Acheter quand le StepMA PDF est en hausse, et que le prix traverse le RSI 30.
Fermer l'achat lorsque le RSI atteint 70 (ou acheter SL, TS ad TP) et ceci je ne sais pas comment l'insérer.
Vendre lorsque le StepMA PDF est en hausse et que le prix franchit le RSI 70.
Fermer la vente lorsque le RSI atteint 30 (ou acheter SL, TS ad TP), je ne sais pas comment l'insérer.

int doWhat = _doNothing;
      double hull_trend_current  = iCustom(NULL,0,"StepMA pdf 4_6",PERIOD_CURRENT,"",PdfmaLength,SensivityFactor,ConstantStepSize,PdfmaVariance,PdfmaMean,PriceToUse,PdfmaFilter,9,BarToUse);
      double hull_trend_previous = iCustom(NULL,0,"StepMA pdf 4_6",PERIOD_CURRENT,"",PdfmaLength,SensivityFactor,ConstantStepSize,PdfmaVariance,PdfmaMean,PriceToUse,PdfmaFilter,9,BarToUse+1);
      double rsicurrent=iRSI(NULL,0,rsiu,PRICE_CLOSE,0);
      double rsiprevious=iRSI(NULL,0,rsiu,PRICE_CLOSE,1);
      
         if (hull_trend_current==1 && rsiprevious<lowerband&&rsicurrent>=lowerband)
               doWhat = _doBuy;
         
         if (hull_trend_current==-1 && rsiprevious>upperband&&rsicurrent<=upperband)
               doWhat = _doSell;
         
         if (doWhat==_doNothing && !DisplayInfo) return(0);

Mais je ne sais pas si c'est correct ?
Comment puis-je créer une condition de clôture pour l'achat et la vente ?

extern int rsiu = 14; // RSI period
extern int lowerband = 30; // RSI lowerband
extern int upperband = 70; // RSI upperband
 
simon_json:

Salut mladen,

J'essaie de combiner StepMA PDF et RSI comme ceci. Acheter quand le StepMA PDF est à la hausse et que le prix traverse le RSI 30.
Fermer acheter quand le RSI atteint 70 (ou acheter SL, TS ad TP) et ceci je ne sais pas comment l'insérer.
Vendre lorsque le StepMA PDF est en hausse et que le prix franchit le RSI 70.
Fermer vendre lorsque le RSI atteint 30 (ou acheter SL, TS ad TP), ce que je ne sais pas comment faire.

Mais je ne sais pas si c'est correct ?
Comment puis-je faire en sorte que la condition de clôture s'applique à la fois à l'achat et à la vente ?

D'après ce que je vois, c'est OK.

En ce qui concerne la condition de fermeture : pourquoi ne pas simplement fermer les ordres de type opposé lorsqu'un signal d'ouverture d'un nouvel ordre est émis ?

 
simon_json:

Bonjour mladen,

J'essaie de combiner StepMA PDF et RSI comme ceci. Acheter lorsque le StepMA PDF est à la hausse, et que le prix traverse le RSI 30.
Fermer l'achat lorsque le RSI atteint 70 (ou acheter SL, TS et TP) et je ne sais pas comment insérer ceci.
Vendre lorsque le StepMA PDF est en hausse et que le prix franchit le RSI 70.
Fermer la vente lorsque le RSI atteint 30 (ou acheter SL, TS ad TP), je ne sais pas comment l'insérer.

Mais je ne sais pas si c'est correct ?
Comment puis-je créer une condition de clôture pour l'achat et la vente ?

Il faut également fermer l'achat si le StepMA PDF passe de la hausse à la baisse (si un ordre d'achat est ouvert).

Et aussi fermer la vente si le StepMA PDF passe de la baisse à la hausse (si un ordre de vente est ouvert).

 
mladen:

D'après ce que je vois, c'est OK

En ce qui concerne la condition de fermeture : pourquoi ne pas simplement fermer les ordres de type opposé lorsqu'un signal d'ouverture d'un nouvel ordre est émis ?

Merci pour la réponse !
J'ai peur de ne pas comprendre :) Je ne pense pas que cela fonctionne de fermer les ordres lorsqu'un signal d'ouverture d'un nouvel ordre est émis.
Cela fonctionne comme ça maintenant :



Et c'est bien.
Je veux également fermer un ordre par deux autres conditions que seulement SL, TP comme il le fait maintenant.
Et les conditions devraient être :
Si un ordre d'achat est ouvert et queStepMA PDF passe de haut en bas, l'ordre d'achat doit être fermé.
Si
un ordre d'achat est ouvert et quele RSIatteint 70 (bande supérieure), l'ordre d'achat doit être fermé.

Et l'inverse pour la vente :
Si un ordre de vente est ouvert et que le StepMA PDF passe de la baisse à la hausse, l'ordre de vente doit être fermé.
Si un ordre de vente est ouvert et que le RSIatteint 30(bande inférieure),l'ordre de ventedoit être fermé.

 
simon_json:

Merci pour la réponse !
J'ai bien peur de ne pas comprendre :) Je ne pense pas que cela fonctionnera pour fermer des ordres lorsqu'un signal pour ouvrir un nouvel ordre arrive.
Cela fonctionne comme ceci maintenant :



Et c'est bien.
Je veux aussi fermer un ordre par deux autres conditions que seulement SL, TP comme il le fait maintenant.
Les conditions devraient être les suivantes :
Si un ordre d'achat est ouvert et quele StepMA PDF passe de la hausse à la baisse, l'ordre d'achat devrait être fermé.
Si
un ordre d'achat est ouvert et quele RSIatteint 70 (bande supérieure), l'ordre d'achat doit être fermé.

Et le contraire pour la vente :
Si un ordre de vente est ouvert et que le StepMA PDF passe de la baisse à la hausse, l'ordre de vente doit être fermé.
Si un ordre de vente est ouvert et que le RSIatteint 30(bande inférieure),l'ordre de ventedoit être fermé.

Simon

Vous devez alors vérifier les conditions de fermeture de la même manière que les conditions d'ouverture.

 
mladen:

Essayez comme ceci :

Merci pour ce conseil, cela fonctionne parfaitement maintenant :D

Il suffit de changer les conditions d'enchères pour l'achat et la vente.

 

Bonjour ;

Est-il possible de coder l'indien ci-joint de manière à pouvoir modifier la taille et la couleur de la police, ainsi que l'emplacement des coins sur le graphique ?

J'apprécierais toute aide.

Merci

Dossiers :
 
speedytina:

Bonjour ;

Est-il possible de coder l'indien ci-joint de manière à pouvoir modifier la taille et la couleur de la police, ainsi que l'emplacement des coins sur le graphique ?

J'apprécierais toute aide.

Merci

Essayez quelque chose comme ceci (tout sauf le coin)

#property indicator_chart_window
#property strict

extern double LotSize=1;   // Lot Size
extern int    CommentsXPos           = 50;
extern int    CommentsStartYPos      = 20;
extern int    CommentLinesIncrement  = 13;
extern string CommentFont            = "Courier new";
extern int    CommentFontSize        = 10;
extern string CommentsID             = "comment";
extern color  CommentsColorOddLines  = clrDeepSkyBlue;
extern color  CommentsColorEvenLines = clrSandyBrown;

int init()   { return(0); }
int deinit() { return(0); }

#define   NL "\n"
int start()
{
   string DepositCurrency=AccountInfoString(ACCOUNT_CURRENCY);
   double PipValue=(((MarketInfo(Symbol(),MODE_TICKVALUE)*MathPow(10,MathMod(_Digits,2)))/MarketInfo(Symbol(),MODE_TICKSIZE))*LotSize);
   double PointValue=PipValue/10;

   string CommentString="";
   CommentString+="Your deposit currency: " + DepositCurrency +NL;
   CommentString+="Lot size requested: " + DoubleToStr(LotSize,2) +NL;
   CommentString+="-----------------------------------------------------------------"+NL;
   CommentString+="Value of one point (" + Symbol() + "):  $" + DepositCurrency + " " + DoubleToStr(PointValue,3) +NL;
   CommentString+="Value of one pip   (" + Symbol() + ") : $" + DepositCurrency + " " + DoubleToStr(PipValue,3) +NL;
   CommentString+="-----------------------------------------------------------------"+NL;

   displayComment(CommentString,CommentsXPos,CommentsStartYPos,CommentLinesIncrement,CommentsID,CommentsColorOddLines,CommentsColorEvenLines);                 
   return(0);
}


//-------------------------------------------------------------------
//
//-------------------------------------------------------------------
//
//
//
//
//

#include <ChartObjects\ChartObjectsTxtControls.mqh> 
CChartObjectLabel  commentLabels[];

//
//
//
//
//

void displayComment(string comment, int xpos, int ypos, int increment, string id, color commentColorOdd, color commentColorEven)
{
   string lines[];
   int    linesNo = 0;
   int    s =  0;
   int    i =  StringFind(comment,NL,s);
      while (i > 0)
      {
         string current = StringSubstr(comment,s,i-s);
         ArrayResize(lines,linesNo+1); 
                     lines[linesNo] = current; linesNo++;
               s = i + 1;
               i = StringFind(comment,NL,s);
      }
      for (i=ArraySize(commentLabels)-1; i>=0; i--) commentLabels[i].Delete(); ArrayResize(commentLabels,linesNo);
      for (i=0; i<linesNo; i++)
         if (MathMod(i,2)==0)
               LabelCreate(commentLabels[i],id+":"+(string)i,StringSubstr(lines[i],0,StringLen(lines[i])-1),commentColorOdd ,xpos,ypos+i*increment,CommentFontSize,CommentFont);
         else  LabelCreate(commentLabels[i],id+":"+(string)i,StringSubstr(lines[i],0,StringLen(lines[i])-1),commentColorEven,xpos,ypos+i*increment,CommentFontSize,CommentFont);
}
bool LabelCreate(CChartObjectLabel &lbl,const string name,const string text, const color clr,const int x,const int y, int fontSize=10, string font="Courier new") 
{ 
   if (!lbl.Create(0,name,0,x,y)) return(false); 
   if (!lbl.Description(text))    return(false); 
   if (!lbl.FontSize(fontSize))   return(false); 
   if (!lbl.Color(clr))           return(false); 
   if (!lbl.Font(font))           return(false); 
   return(true); 
} 
 

Mladen, je n'arrive pas à le faire fonctionner. Il ne se met pas à jour et n'affiche pas d'alertes. Pouvez-vous m'aider, s'il vous plaît ?

#property version   "1.00"
#property strict


#property indicator_chart_window
#property indicator_buffers    4
#property  indicator_color1     Gold
#property  indicator_color2     DodgerBlue
#property  indicator_color3     LimeGreen
#property  indicator_color4     Crimson

#property  indicator_width1     2
#property  indicator_width2     2
#property  indicator_width3     2
#property  indicator_width4     2

extern string                NOTE1           = "SELECT PARAMETERS OF THE INDICATOR"; //SPAN MA CROSS PARAMS
extern int                   SpanPeriod      = 1;            // Period of Span
extern int                   SpanShift       = -26;          // Shift of Span
extern ENUM_MA_METHOD        SpanMode        = 1;            // Mode of Span
extern ENUM_APPLIED_PRICE    SpanPrice       = 0;            // Applied price of Span
extern int                   MaPeriod        = 55;           // Period of Moving average
extern int                   MaShift         = 0;            // Shift of Moving average
extern ENUM_MA_METHOD        MaMode          = 1;            // Mode of Moving average
extern ENUM_APPLIED_PRICE    MaPrice         = 0;            // Applied price of Moving average

extern string                NOTE2           = "SELECT COLORS/STYLES OF THE INDICATOR"; //SPAN MA CROSS COLORS/STYLES
extern color                 SpanClr         = Gold;         // Span color
extern int                   SpanWdt         = 2;            // Span width
extern ENUM_LINE_STYLE       SpanStl         = 0;            // Span line style
extern color                 MaClr           = DodgerBlue;   // Moving average color
extern int                   MaWdt           = 2;            // Moving average width
extern ENUM_LINE_STYLE       MaStl           = 0;            // Moving average line style

extern string                NOTE3           = "SELECT PARAMETERS OF THE SIGNAL ARROWS"; //SPAN MA CROSS PARAMETERS OF THE SIGNAL ARROWS
extern bool                  DrawArrows      = true;         // Draw signal arrows?
extern bool                  DrawMaLines     = true;         // Draw lines?
extern color                 UpArrowClr      = LimeGreen;    // Up arrow color
extern int                   UpArrowWdt      = 2;            // Up arrow width
extern color                 DnArrowClr      = Crimson;      // Down arrow color
extern int                   DnArrowWdt      = 2;            // Down arrow width
extern int                   ArrowsDistance  = 2;            // Arrows distance from candle
extern int                   ArrowHshift     = 0;            // Shift for arrows from cross signal

extern string                NOTE4           = "SELECT PARAMETERS OF THE ALERT"; //SPAN MA CROSS PARAMETERS OF THE ALERT
extern bool                  AlertsOn        = true;         // Active alert?
extern bool                  AlertsOnCurrent = true;         // Alert on current unclosed bar
extern bool                  AlertsMessage   = true;         // Alert message
extern bool                  AlertsSound     = true;         // Alert sound
extern bool                  AlertsEmail     = false;        // Alert e-mail
extern string                SoundFile       = "alert2.wav"; // Filename of sound alert

string                       IndicatorFileName;
int                          WhichBar;
double                       Gap;


double   SpanBuffer[];     // Buffer of the Span
double   MaBuffer[];       // Buffer of the Moving average
double   CrossUpBuffer[];  // Up arrow buffer
double   CrossDnBuffer[];  // Down arrow buffer
double   TrendBuffer[];    // Span/Ma cross buffer


int init()
  {
   IndicatorFileName = WindowExpertName();
   IndicatorBuffers(5);
   
   
   SetIndexBuffer(0, SpanBuffer);
   SetIndexBuffer(1, MaBuffer);
   SetIndexBuffer(2, CrossUpBuffer);
   SetIndexBuffer(3, CrossDnBuffer);
   SetIndexBuffer(4, TrendBuffer);
   
   if (DrawMaLines) {   
   SetIndexStyle (0, DRAW_LINE, SpanStl, SpanWdt, SpanClr);  
   SetIndexStyle (1, DRAW_LINE, MaStl, MaWdt, MaClr);}
        
   else { 
   SetIndexStyle(0, DRAW_NONE); 
   SetIndexStyle(1, DRAW_NONE);} 
     
   if (DrawArrows) {
   SetIndexStyle (2, DRAW_ARROW, 0, UpArrowWdt, UpArrowClr); SetIndexArrow(2, 233);
   SetIndexStyle (3, DRAW_ARROW, 0, DnArrowWdt, DnArrowClr); SetIndexArrow(3, 234);}
   
   else { 
   SetIndexStyle(2, DRAW_NONE); 
   SetIndexStyle(3, DRAW_NONE);} 
   
   SetIndexShift(2,ArrowHshift);
   SetIndexShift(3,ArrowHshift);
   
return(0);}
  
int deinit() {  return(0); }

int start() {
   int counted_bars = IndicatorCounted();
   int i, limit;

   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
         limit = MathMin(Bars-counted_bars, Bars-1);
         
         
  for(i=limit; i>=0; i--){   
      SpanBuffer[i]  = iMA(NULL, 0, SpanPeriod, SpanShift, SpanMode, SpanPrice, i);
      MaBuffer[i]    = iMA(NULL, 0, MaPeriod, MaShift, MaMode, MaPrice, i);
      Gap = iATR(NULL,0,20,i);
      
      if (i<Bars-1) TrendBuffer[i] = TrendBuffer[i+1];
         if (SpanBuffer[i] > MaBuffer[i]) TrendBuffer[i] = 1;
         if (SpanBuffer[i] < MaBuffer[i]) TrendBuffer[i] =-1;
         
      
         CrossUpBuffer[i] = EMPTY_VALUE;
         CrossDnBuffer[i] = EMPTY_VALUE;
         if (i<Bars-1 && TrendBuffer[i]!= TrendBuffer[i+1])
         if (TrendBuffer[i] == 1)
               CrossUpBuffer[i] = Low[i]  - ArrowsDistance * Gap;
         else  CrossDnBuffer[i] = High[i] + ArrowsDistance * Gap; 
         }
         
         if (AlertsOn)
         {
         if (AlertsOnCurrent)
                  WhichBar = 0;
         else     WhichBar = 1;      
      
         if (TrendBuffer[WhichBar] != TrendBuffer[WhichBar+1])
         if (TrendBuffer[WhichBar] == 1)
               doAlert("uptrend");
         else  doAlert("downtrend");       
   }
   
   return(0);
}


// CUSTOM FUNCTIONS -------------------------

 void doAlert(string doWhat)
{
   static string   previousAlert="nothing";
   static datetime previousTime;
   string message;
   
      if (previousAlert != doWhat || previousTime != Time[0]) {
          previousAlert  = doWhat;
          previousTime   = Time[0];

          message =  StringConcatenate(Symbol()," at ",TimeToStr(TimeLocal(),TIME_SECONDS)," Span ma cross ", doWhat);
             if (AlertsMessage) Alert(message);
             if (AlertsEmail)   SendMail(StringConcatenate(Symbol()," Span ma cross "), message);
             if (AlertsSound)   PlaySound(SoundFile);
      }
      }
Raison: