Aiuto per la codifica - pagina 679

 
stevenpun:

Ciao signor Mladen,

Stavo pensando di aggiungere un commento quando il prezzo ha invertito la tendenza e avere "wait for buy" e "wait for sell".

Aggiungendo la nuova linea all'acquisto non ci sono problemi, ma quando la aggiungo alla vendita non riesco a farla funzionare.

Cosa devo cambiare?

Provate così:

   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;
      }        
 

Ciao mladen,

Cerco di combinare StepMA PDF e RSI in questo modo. Comprare quando StepMA PDF è su, e il prezzo attraversa RSI 30.
Chiudere l'acquisto quando RSI raggiunge 70 (o comprare SL, TS e TP) e questo non so come inserirlo.
Vendere quando la StepMA PDF è al rialzo e il prezzo incrocia RSI 70.
Chiudere vendere quando RSI raggiunge 30 (o comprare SL, TS e TP), questo non so come inserirlo.

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);

Ma non so se è corretto?
Come posso fare la condizione di chiusura sia per comprare che per vendere?

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

Ciao mladen,

Cerco di combinare StepMA PDF e RSI in questo modo. Comprare quando StepMA PDF è su, e il prezzo incrocia RSI 30.
Chiudere comprare quando RSI raggiunge 70 (o comprare SL, TS e TP) e questo non so come inserirlo.
Vendere quando la StepMA PDF è al rialzo, e il prezzo incrocia RSI 70.
Chiudere vendere quando RSI raggiunge 30 (o comprare SL, TS e TP), questo non so come inserirlo.

Ma non so se è corretto?
Come posso fare la condizione di chiusura sia per comprare che per vendere?

Per quanto vedo, è OK

Per quanto riguarda la condizione di chiusura: perché non chiudere semplicemente gli ordini di tipo opposto quando arriva un segnale di apertura di un nuovo ordine?

 
simon_json:

Ciao mladen,

Cerco di combinare StepMA PDF e RSI in questo modo. Compri quando StepMA PDF è su, e il prezzo attraversa RSI 30.
Chiudere l'acquisto quando RSI raggiunge 70 (o comprare SL, TS e TP) e questo non so come inserirlo.
Vendere quando la StepMA PDF è al rialzo e il prezzo incrocia RSI 70.
Chiudere vendere quando RSI raggiunge 30 (o comprare SL, TS e TP), questo non so come inserirlo.

Ma non so se è corretto?
Come posso fare la condizione di chiusura sia per comprare che per vendere?

Se dovrebbe anche chiudere l'acquisto se StepMA PDF cambia da su a giù (se un ordine di acquisto è aperto).

E anche chiudere vendere se StepMA PDF cambia da giù a su (se un ordine di vendita è aperto.

 
mladen:

Per quanto vedo, va bene

Per quanto riguarda la condizione di chiusura: perché non chiudete semplicemente gli ordini di tipo opposto quando arriva un segnale di apertura di un nuovo ordine?

Grazie per la risposta!
Temo di non capire :) Non credo che funzioni chiudere gli ordini quando arriva un segnale di apertura di un nuovo ordine.
Adesso funziona così:



E questo va bene.
Voglio anche chiudere un ordine con due condizioni in più rispetto al solo SL, TP come fa ora.
E le condizioni dovrebbero essere:
Se un ordine di acquisto è aperto eStepMA PDF cambia da su a giù, l'ordine di acquisto dovrebbe essere chiuso.
Se
un ordine di acquisto è aperto e RSIraggiunge 70 (banda superiore), l'ordine di acquisto dovrebbe essere chiuso.

E il contrario per vendere:
Se un ordine di vendita è aperto e StepMA PDF cambia da giù a su, l'ordine di vendita dovrebbe essere chiuso.
Se un ordine di vendita è aperto e RSIraggiunge 30(banda inferiore),l'ordine di vendita dovrebbeessere chiuso.

 
simon_json:

Grazie per la risposta!
Temo di non capire :) Non credo che funzionerà per chiudere gli ordini quando arriva un segnale di apertura di un nuovo ordine.
Adesso funziona così:



E questo va bene.
Voglio anche chiudere un ordine in base a due condizioni in più rispetto al solo SL, TP come fa ora.
E le condizioni dovrebbero essere:
Se un ordine di acquisto è aperto eStepMA PDF cambia da su a giù, l'ordine di acquisto dovrebbe essere chiuso.
Se
un ordine di acquisto è aperto e RSIraggiunge 70 (banda superiore), l'ordine di acquisto dovrebbe essere chiuso.

E l'opposto per la vendita:
Se un ordine di vendita è aperto e StepMA PDF cambia da giù a su, l'ordine di vendita dovrebbe essere chiuso.
Se un ordine di vendita è aperto e RSIraggiunge 30(banda inferiore),l'ordine di vendita dovrebbeessere chiuso.

Simon

Allora devi controllare le condizioni di chiusura allo stesso modo delle condizioni di apertura

 
mladen:

Prova così:

Grazie per questo consiglio, ora funziona perfettamente :D

Basta cambiare la condizione di offerta per comprare e vendere.

 

Ciao;

È possibile codificare l'indi allegato in modo che io abbia la possibilità di cambiare la dimensione del carattere, il colore del carattere e la posizione dell'angolo sul grafico?

Apprezzo qualsiasi aiuto.

Grazie

 
speedytina:

Ciao;

È possibile codificare l'indi allegato in modo che io abbia la possibilità di cambiare la dimensione del carattere, il colore del carattere e la posizione dell'angolo sul grafico?

Apprezzo qualsiasi aiuto.

Grazie

Prova qualcosa come questo (tutto tranne l'angolo)

#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 non riesco a farlo funzionare. Non si aggiorna e non mostra avvisi. Puoi aiutarmi, per favore?

#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);
      }
      }
Motivazione: