Ajuda na codificação - página 679

 
stevenpun:

Olá, Sr. Mladen,

Eu estava pensando em acrescentar um comentário quando o preço se reverteu em relação à tendência e ter "esperar para comprar" & "esperar para vender" .

Adicionar a nova linha à compra não é problema, mas quando adicioná-la para vendê-la não pode fazê-la funcionar.

O que eu deveria mudar ?

Tente assim :

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

Oi mladen,

Eu tento combinar StepMA PDF e RSI desta forma. Compre quando o StepMA PDF estiver acima, e o preço cruza o RSI 30.
Fechar a compra quando a RSI atingir 70 (ou comprar SL, TS ad TP) e isto eu não sei como inserir.
Vender quando o StepMA PDF estiver acima, e o preço cruza o RSI 70.
Fechar venda quando RSI atingir 30 (ou comprar SL, TS ad TP), isto eu não sei como inserir.

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

Mas eu não sei se está correto?
Como posso fazer a condição de fechamento tanto para comprar como para vender?

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

Oi mladen,

Eu tento combinar StepMA PDF e RSI desta forma. Compre quando o StepMA PDF estiver acima e o preço cruzar RSI 30.
Feche a compra quando o RSI atingir 70 (ou compre SL, TS ad TP) e isto eu não sei como inserir.
Vender quando o StepMA PDF está acima, e o preço cruza RSI 70.
Fechar vender quando RSI atinge 30 (ou comprar SL, TS ad TP), isto eu não sei como inserir.

Mas eu não sei se está correto?
Como posso fazer a condição de fechamento tanto para comprar como para vender?

Tanto quanto eu vejo, está OK.

A partir de condições próximas: por que você simplesmente não fecha ordens do tipo oposto quando chega um sinal para a abertura de uma nova ordem?

 
simon_json:

Oi mladen,

Eu tento combinar o StepMA PDF e o RSI desta forma. Compre quando o StepMA PDF está para cima, e o preço cruza o RSI 30.
Fechar compra quando a RSI atinge 70 (ou comprar SL, TS ad TP) e isto eu não sei como inserir.
Vender quando o StepMA PDF estiver acima, e o preço cruza o RSI 70.
Fechar venda quando RSI atingir 30 (ou comprar SL, TS ad TP), isto eu não sei como inserir.

Mas eu não sei se está correto?
Como posso fazer a condição de fechamento tanto para comprar como para vender?

Se também deve fechar a compra se o StepMA PDF mudar de cima para baixo (se uma ordem de compra estiver aberta).

E também fechar venda se o StepMA PDF mudar de baixo para cima (se uma ordem de venda estiver aberta).

 
mladen:

Tanto quanto eu vejo, está tudo bem.

A partir de condições próximas: por que você simplesmente não fecha ordens do tipo oposto quando chega um sinal para a abertura de uma nova ordem?

Obrigado pela resposta!
Receio não entender :) Acho que não funcionará para fechar pedidos quando chegar um sinal para a abertura de um novo pedido.
Funciona assim agora:



E isso é bom.
Eu também quero fechar um pedido por mais duas condições do que apenas SL, TP como faz agora.
E as condições devem ser:
Se uma ordem de compra for aberta e oStepMA PDF mudar de cima para baixo, a ordem de compra deve ser fechada.
Se
uma ordem de compra for aberta e o RSIatingir 70 (banda superior),a ordem de compra deve ser fechada.

E o oposto para venda:
Se uma ordem de venda estiver aberta e o StepMA PDF mudar de baixo para cima, a ordem de venda deve ser fechada.
Se uma ordem de venda estiver aberta e o RSI chegara 30(banda inferior),aordem de venda deve serfechada.

 
simon_json:

Obrigado pela resposta!
Receio não entender :) Acho que não funcionará para fechar pedidos quando chegar um sinal para a abertura de um novo pedido.
Funciona assim agora:



E isso é bom.
Eu também quero fechar um pedido por mais duas condições do que apenas SL, TP como faz agora.
E as condições devem ser:
Se uma ordem de compra for aberta e oStepMA PDF mudar de cima para baixo, a ordem de compra deve ser fechada.
Se
uma ordem de compra for aberta e o RSIatingir 70 (banda superior),a ordem de compra deve ser fechada.

E o contrário para venda:
Se uma ordem de venda estiver aberta e o StepMA PDF mudar de baixo para cima, a ordem de venda deve ser fechada.
Se uma ordem de venda for aberta e o RSI chegara 30(banda inferior),aordem de venda deve serfechada.

Simon

Então você tem que verificar as condições de fechamento da mesma maneira que as condições abertas

 
mladen:

Tente assim :

Obrigado por esse conselho, funciona perfeitamente agora :D

Basta alterar a condição de oferta para comprar e vender .

 

Hi;

É possível codificar o indi em anexo para que eu tenha a capacidade de mudar o tamanho da fonte, a cor da fonte e a localização dos cantos na tabela?

Agradeço qualquer ajuda.

Obrigado

Arquivos anexados:
 
speedytina:

Hi;

É possível codificar o indi em anexo para que eu tenha a capacidade de mudar o tamanho da fonte, a cor da fonte e a localização dos cantos na tabela?

Agradeço qualquer ajuda.

Obrigado

Tente algo como isto (todos exceto o canto)

#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 eu não consigo fazer funcionar. Ela não se atualiza e não mostra alertas. Você pode ajudar, por favor?

#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);
      }
      }
Razão: