Помощь в кодировании - страница 679

 
stevenpun:

Здравствуйте, господин Младен,

Я думал добавить комментарий, когда цена отклоняется от тренда и есть "ждать покупки" и "ждать продажи".

Добавление новой линии к покупке не проблема, но когда добавляю ее к продаже, она не может работать.

Что мне нужно изменить?

Попробуйте вот так:

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

Привет, Младен,

Я пытаюсь комбинировать StepMA PDF и RSI следующим образом. Покупать, когда StepMA PDF поднимается, и цена пересекает RSI 30.
Закрываю покупку, когда RSI достигает 70 (или покупаю SL, TS и TP), а это я не знаю как вставить.
Продавать, когда StepMA PDF поднимается, и цена пересекает RSI 70.
Закрываем продажу, когда RSI достигает 30 (или покупаем SL, TS ad TP), это я не знаю, как вставить.

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

Но я не знаю, правильно ли это?
Как я могу сделать условие закрытия как для покупки, так и для продажи?

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

Привет, Младен,

Я пытаюсь объединить StepMA PDF и RSI следующим образом. Покупать, когда StepMA PDF растет, и цена пересекает RSI 30.
Закрывать покупку, когда RSI достигает 70 (или покупать SL, TS ad TP) и это я не знаю, как вставить.
Продавать, когда StepMA PDF вверх, и цена пересекает RSI 70.
Закрывать продажу, когда RSI достигает 30 (или покупать SL, TS ad TP), это я не знаю, как вставить.

Но я не знаю, правильно ли это?
Как я могу сделать условие закрытия как для покупки, так и для продажи?

Насколько я вижу, это нормально.

Что касается условия закрытия: почему бы вам просто не закрывать ордера противоположного типа, когда приходит сигнал на открытие нового ордера?

 
simon_json:

Привет, Младен,

Я пытаюсь комбинировать StepMA PDF и RSI следующим образом. Покупаю, когда StepMA PDF повышается, и цена пересекает RSI 30.
Закрываю покупку, когда RSI достигает 70 (или покупаю SL, TS и TP), а это я не знаю как вставить.
Продавать, когда StepMA PDF поднимается, и цена пересекает RSI 70.
Закрываем продажу, когда RSI достигает 30 (или покупаем SL, TS ad TP), это я не знаю, как вставить.

Но я не знаю, правильно ли это?
Как я могу сделать условие закрытия как для покупки, так и для продажи?

Если StepMA PDF изменяется с вверх на вниз (если открыт ордер на покупку), то следует закрыть покупку.

И также закрывать продажу, если StepMA PDF изменяется от вниз к вверх (если открыт ордер на продажу.

 
mladen:

Насколько я вижу, все в порядке.

Что касается условия закрытия: почему бы вам просто не закрывать ордера противоположного типа, когда приходит сигнал на открытие нового ордера?

Спасибо за ответ!
Боюсь, я не понимаю :) Не думаю, что будет работать закрытие ордеров при поступлении сигнала на открытие нового ордера.
Сейчас это работает так:



И это хорошо.
Я также хочу закрывать ордер не только по SL, TP, как сейчас, а еще по двум условиям.
И условия должны быть такими:
Если ордер на покупку открыт иStepMA PDF изменяется с вверх на вниз, ордер на покупку должен быть закрыт.
Если
ордер на покупку открыт и RSIдостигает 70 (верхняя полоса),ордер на покупку должен быть закрыт.

И наоборот для продажи:
Если ордер на продажу открыт и StepMA PDF меняется с нисходящего на восходящий, ордер на продажу следует закрыть.
Если ордер на продажу открыт и RSIдостигает 30(нижняя полоса),ордер на продажудолжен быть закрыт.

 
simon_json:

Спасибо за ответ!
Боюсь, я не понимаю :) Я не думаю, что будет работать закрытие ордеров при поступлении сигнала на открытие нового ордера.
Сейчас это работает вот так:



И это хорошо.
Я также хочу закрывать ордер не только по SL, TP, как сейчас, а еще по двум условиям.
Условия должны быть такими:
Если ордер на покупку открыт иStepMA PDF меняется с вверх на вниз, ордер на покупку должен быть закрыт.
Если
ордер на покупку открыт и RSIдостигает 70 (верхняя полоса),ордер на покупку должен быть закрыт.

И наоборот для продажи:
Если ордер на продажу открыт и StepMA PDF меняется с нисходящего на восходящий, ордер на продажу должен быть закрыт.
Если ордер на продажу открыт и RSIдостигает 30(нижняя полоса),ордер на продажудолжен быть закрыт.

Саймон

Тогда вы должны проверять условия закрытия так же, как и условия открытия.

 
mladen:

Попробуйте вот так:

Спасибо за совет, теперь все работает отлично :D

Просто измените условие ставки для покупки и продажи.

 

Здравствуйте;

Возможно ли закодировать прилагаемый indi так, чтобы я имел возможность изменять размер шрифта, цвет шрифта и расположение углов на графике?

Буду признателен за любую помощь.

Спасибо

Файлы:
 
speedytina:

Здравствуйте;

Возможно ли закодировать приложенный indi так, чтобы у меня была возможность изменять размер шрифта, цвет шрифта и расположение углов на графике?

Буду признателен за любую помощь.

Спасибо

Попробуйте что-то вроде этого (все, кроме угла).

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

Младен, мне не удается заставить его работать. Он не обновляется и не показывает предупреждения. Вы можете помочь, пожалуйста?

#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);
      }
      }
Причина обращения: