почитал спасибо!
но вот еще вопрос, переписал код и добавил еще один буфер специально для советника
//+------------------------------------------------------------------+
//| свечи.mq4 |
//| Evgenio |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Evgenio"
#property link "http://www.metaquotes.net"
#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Yellow
#property indicator_color2 Green
//-------------------Входные параметры-----------------------------------------------------------
extern int test=1;
extern int RSI_Per=6;
extern int MA_Per=12;
extern int SmoothType=0;
extern int normal=5; //до какого знака нормализовать данные
extern int rasst=350; //расстояние стрелок от графика
//----------буферы для индикаторов---------------------------------------------------------------
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
//----------переменные используемые в расчетах---------------------------------------------------
int up=71; //код стрелки вверх (рисуется на графике)
int down=72; //код стрелки вниз (рисуется на графике)
bool bay=true;
bool str,str1=false;
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
int init()
{
SetIndexStyle(0,DRAW_LINE,0,1);
SetIndexBuffer(0,ExtMapBuffer1);//Свойства RSI
SetIndexLabel(0,"RSI("+RSI_Per+")");
SetIndexStyle(1,DRAW_LINE,0,2);
SetIndexBuffer(1,ExtMapBuffer2);//Свойства MA
SetIndexLabel(1,"MA ("+MA_Per+"), ");
SetIndexBuffer(2,ExtMapBuffer3);//Свойства MA
return(0);
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
int deinit()
{
return(0);
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
int start()
{
int counted_bars=IndicatorCounted();
int limit,cnt;
ExtMapBuffer3[test]=iRSI(NULL,0,RSI_Per,PRICE_CLOSE,test);
if (counted_bars==0)
{
limit=Bars-RSI_Per-1;
for(cnt=limit; cnt>=0; cnt--)
{
ExtMapBuffer1[cnt]=iRSI(NULL,0,RSI_Per,PRICE_CLOSE,cnt);
}
for(cnt=limit-MA_Per; cnt>=0; cnt--)
{
ExtMapBuffer2[cnt]=iMAOnArray(ExtMapBuffer1,0,MA_Per,0,SmoothType,cnt);
}
}
// Первая свеча (вторая с лева)---------------------------------------
double H=NormalizeDouble(High[1],normal);
double L=NormalizeDouble(Low[1],normal);
double C=NormalizeDouble(Close[1],normal);
double Op=NormalizeDouble(Open[1],normal);
// Вторая свеча (третья слева)---------------------------------------
double H_1=NormalizeDouble(High[2],normal);
double L_1=NormalizeDouble(Low[2],normal);
double C_1=NormalizeDouble(Close[2],normal);
double Op_1=NormalizeDouble(Open[2],normal);
// Третья свеча (четвертая слева)---------------------------------------
double H_2=NormalizeDouble(High[3],normal);
double L_2=NormalizeDouble(Low[3],normal);
double C_2=NormalizeDouble(Close[3],normal);
double Op_2=NormalizeDouble(Open[3],normal);
// Четвертая свеча (Пятая слева)---------------------------------------
double H_3=NormalizeDouble(High[4],normal);
double L_3=NormalizeDouble(Low[4],normal);
double C_3=NormalizeDouble(Close[4],normal);
double Op_3=NormalizeDouble(Open[4],normal);
// Пятая свеча (Шестая слева)---------------------------------------
double H_4=NormalizeDouble(High[5],normal);
double L_4=NormalizeDouble(Low[5],normal);
double C_4=NormalizeDouble(Close[5],normal);
double Op_4=NormalizeDouble(Open[5],normal);
//--------------
double par=NormalizeDouble(iSAR(Symbol(),60,0.02,0.2,0),normal);
double par1=NormalizeDouble(iSAR(Symbol(),1440,0.02,0.2,0),normal);
// для коротких позиций******************************************************************
// Медвежье поглощение----------------------------------------------------------------------------------------------------------------------
if (C_4-((C_4-Op_4)/2)<C_3-((C_3-Op_3)/2) && C_3-((C_3-Op_3)/2)<C_2-((C_2-Op_2)/2) && C_2-((C_2-Op_2)/2)<C_1-((C_1-Op_1)/2) && Op_1<C_1 && Op>C && Op>C_1 && C<Op_1)
{
//рисование стрелки-----------------------------------------------
ObjectCreate("down"+Op, OBJ_ARROW, 0, Time[1], Open[1]+rasst*Point);
ObjectSet("down"+Op, OBJPROP_ARROWCODE, down);
ObjectSet("down"+Op, OBJPROP_COLOR, Yellow);
//надпись---------------------------------------------------------
ObjectCreate("zavesa", OBJ_LABEL, 0, 0, 0);
ObjectSetText("zavesa", "Фигура разворота", 12, "Times New Roman", Yellow);
ObjectSet("zavesa", OBJPROP_XDISTANCE, 50);
ObjectSet("zavesa", OBJPROP_YDISTANCE, 15);
ObjectCreate("zavesa1", OBJ_LABEL, 0, 0, 0);
ObjectSetText("zavesa1", "Медвежье поглощение", 12, "Times New Roman", Yellow);
ObjectSet("zavesa1", OBJPROP_XDISTANCE, 50);
ObjectSet("zavesa1", OBJPROP_YDISTANCE, 35);
bay=false;
str1=true;
}
// для длинных позиций******************************************************************
// Бычье поглощение--------------------------------------------------
if (Op_4-((Op_4-C_4)/2)>Op_3-((Op_3-C_3)/2) && Op_3-((Op_3-C_3)/2)>Op_2-((Op_2-C_2)/2) && Op_2-((Op_2-C_2)/2)>Op_1-((Op_1-C_1)/2) && Op_1>C_1 && Op<C && Op<C_1 && C>Op_1)
{
//рисование стрелки-----------------------------------------------
ObjectCreate("up"+Op, OBJ_ARROW, 0, Time[1], Open[1]-rasst*Point);
ObjectSet("up"+Op, OBJPROP_ARROWCODE, up);
ObjectSet("up"+Op, OBJPROP_COLOR, Aqua);
//надпись---------------------------------------------------------
ObjectCreate("zavesa", OBJ_LABEL, 0, 0, 0);
ObjectSetText(
"zavesa", "Фигура разворота", 12, "Times New Roman", Aqua);
ObjectSet("zavesa", OBJPROP_XDISTANCE, 50);
ObjectSet("zavesa", OBJPROP_YDISTANCE, 15);
ObjectCreate("zavesa1", OBJ_LABEL, 0, 0, 0);
ObjectSetText("zavesa1", "Бычье поглощение", 12, "Times New Roman", Aqua);
ObjectSet("zavesa1", OBJPROP_XDISTANCE, 50);
ObjectSet("zavesa1", OBJPROP_YDISTANCE, 35);
bay=true;
str=true;
}
//++++++++++++++++++++++++++++++++++++++++++++
//здесь рисуются стрелки на RSI
if (str==true && bay==true && ExtMapBuffer1[cnt]>ExtMapBuffer2[cnt] && par<H-((H-L)/2) && par1<H-((H-L)/2))
{
ObjectCreate("up1xv"+Op, OBJ_ARROW, 1, Time[0], ExtMapBuffer1[cnt]-10);
ObjectSet("up1xv"+Op, OBJPROP_ARROWCODE, 225);
str=false;
ObjectSet("up1xv"+Op, OBJPROP_COLOR, Aqua);
}
if (str1==true && bay==false && ExtMapBuffer1[cnt]<ExtMapBuffer2[cnt] && par>H-((H-L)/2) && par1>H-((H-L)/2))
{
ObjectCreate("down1xv"+Op, OBJ_ARROW, 1, Time[0], ExtMapBuffer1[cnt]+10);
ObjectSet("down1xv"+Op, OBJPROP_ARROWCODE, 226);
str1=false;
ObjectSet("down"+Op, OBJPROP_COLOR, Yellow);
}
return(0);
}
//+------------------------------------------------------------------+
советник тотже что и посте выше
1. почему когда запускаю тестирование программа рисует графики но в журнал вообще ничего не пишет, а после остановки тестирования сразу появляются все данные ???
2. почему в буфере всегда 0 ведь вроде должно быть значение RSI ?
Будет ли профит ))))
С уважением!
советник не работает с индикаторными буферами. это прописано в описании индикаторного буфера. сейчас ссылку не дам, но поиском найти - не составит труда.
придется переделывать с помощью вот этого https://www.mql4.com/ru/search/?keyword=%D0%BF%D0%B5%D1%80%D0%B5%D0%BD%D0%BE%D1%81
поиск - "перенос"
да... поставить правильный вопрос - бОльшая часть решения этого вопроса...
ЧТО хотите отыскать... то и искать надо... имхо...
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день уважаемые форумчане, недавно начал изучать MQL4 и вот какой вопрос возник :
есть индикатор:
//+------------------------------------------------------------------+
//| свечи.mq4 |
//| Evgenio |
//| https://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Evgenio"
#property link "https://www.metaquotes.net"
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Yellow
#property indicator_color2 Green
//-------------------Входные параметры-----------------------------------------------------------
extern int RSI_Per=6;
extern int MA_Per=12;
extern int SmoothType=0;
extern int normal=5; //до какого знака нормализовать данные
extern int rasst=350; //расстояние стрелок от графика
//----------буферы для индикаторов---------------------------------------------------------------
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//----------переменные используемые в расчетах---------------------------------------------------
int up=71; //код стрелки вверх (рисуется на графике)
int down=72; //код стрелки вниз (рисуется на графике)
bool bay=true;
bool str,str1=false;
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
int init()
{
SetIndexStyle(0,DRAW_LINE,0,1);
SetIndexBuffer(0,ExtMapBuffer1);//Свойства RSI
SetIndexLabel(0,"RSI("+RSI_Per+")");
SetIndexStyle(1,DRAW_LINE,0,2);
SetIndexBuffer(1,ExtMapBuffer2);//Свойства MA
SetIndexLabel(1,"MA ("+MA_Per+"), ");
return(0);
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
int deinit()
{
return(0);
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
int start()
{
int counted_bars=IndicatorCounted();
int limit,cnt;
if (counted_bars==0)
{
limit=Bars-RSI_Per-1;
for(cnt=limit; cnt>=0; cnt--)
{
ExtMapBuffer1[cnt]=iRSI(NULL,0,RSI_Per,PRICE_CLOSE,cnt);
}
for(cnt=limit-MA_Per; cnt>=0; cnt--)
{
ExtMapBuffer2[cnt]=iMAOnArray(ExtMapBuffer1,0,MA_Per,0,SmoothType,cnt);
}
}
// Первая свеча (вторая с лева)---------------------------------------
double H=NormalizeDouble(High[1],normal);
double L=NormalizeDouble(Low[1],normal);
double C=NormalizeDouble(Close[1],normal);
double Op=NormalizeDouble(Open[1],normal);
// Вторая свеча (третья слева)---------------------------------------
double H_1=NormalizeDouble(High[2],normal);
double L_1=NormalizeDouble(Low[2],normal);
double C_1=NormalizeDouble(Close[2],normal);
double Op_1=NormalizeDouble(Open[2],normal);
// Третья свеча (четвертая слева)---------------------------------------
double H_2=NormalizeDouble(High[3],normal);
double L_2=NormalizeDouble(Low[3],normal);
double C_2=NormalizeDouble(Close[3],normal);
double Op_2=NormalizeDouble(Open[3],normal);
// Четвертая свеча (Пятая слева)---------------------------------------
double H_3=NormalizeDouble(High[4],normal);
double L_3=NormalizeDouble(Low[4],normal);
double C_3=NormalizeDouble(Close[4],normal);
double Op_3=NormalizeDouble(Open[4],normal);
// Пятая свеча (Шестая слева)---------------------------------------
double H_4=NormalizeDouble(High[5],normal);
double L_4=NormalizeDouble(Low[5],normal);
double C_4=NormalizeDouble(Close[5],normal);
double Op_4=NormalizeDouble(Open[5],normal);
//--------------
double par=NormalizeDouble(iSAR(Symbol(),60,0.02,0.2,0),normal);
double par1=NormalizeDouble(iSAR(Symbol(),1440,0.02,0.2,0),normal);
// для коротких позиций******************************************************************
// Медвежье поглощение----------------------------------------------------------------------------------------------------------------------
if (C_4-((C_4-Op_4)/2)<C_3-((C_3-Op_3)/2) && C_3-((C_3-Op_3)/2)<C_2-((C_2-Op_2)/2) && C_2-((C_2-Op_2)/2)<C_1-((C_1-Op_1)/2) && Op_1<C_1 && Op>C && Op>C_1 && C<Op_1)
{
//рисование стрелки-----------------------------------------------
ObjectCreate("down"+Op, OBJ_ARROW, 0, Time[1], Open[1]+rasst*Point);
ObjectSet("down"+Op, OBJPROP_ARROWCODE, down);
ObjectSet("down"+Op, OBJPROP_COLOR, Yellow);
//надпись---------------------------------------------------------
ObjectCreate("zavesa", OBJ_LABEL, 0, 0, 0);
ObjectSetText("zavesa", "Фигура разворота", 12, "Times New Roman", Yellow);
ObjectSet("zavesa", OBJPROP_XDISTANCE, 50);
ObjectSet("zavesa", OBJPROP_YDISTANCE, 15);
ObjectCreate("zavesa1", OBJ_LABEL, 0, 0, 0);
ObjectSetText("zavesa1", "Медвежье поглощение", 12, "Times New Roman", Yellow);
ObjectSet("zavesa1", OBJPROP_XDISTANCE, 50);
ObjectSet("zavesa1", OBJPROP_YDISTANCE, 35);
bay=false;
str1=true;
}
// для длинных позиций******************************************************************
// Бычье поглощение--------------------------------------------------
if (Op_4-((Op_4-C_4)/2)>Op_3-((Op_3-C_3)/2) && Op_3-((Op_3-C_3)/2)>Op_2-((Op_2-C_2)/2) && Op_2-((Op_2-C_2)/2)>Op_1-((Op_1-C_1)/2) && Op_1>C_1 && Op<C && Op<C_1 && C>Op_1)
{
//рисование стрелки-----------------------------------------------
ObjectCreate("up"+Op, OBJ_ARROW, 0, Time[1], Open[1]-rasst*Point);
ObjectSet("up"+Op, OBJPROP_ARROWCODE, up);
ObjectSet("up"+Op, OBJPROP_COLOR, Aqua);
//надпись---------------------------------------------------------
ObjectCreate("zavesa", OBJ_LABEL, 0, 0, 0);
ObjectSetText("zavesa", "Фигура разворота", 12, "Times New Roman", Aqua);
ObjectSet("zavesa", OBJPROP_XDISTANCE, 50);
ObjectSet("zavesa", OBJPROP_YDISTANCE, 15);
ObjectCreate("zavesa1", OBJ_LABEL, 0, 0, 0);
ObjectSetText("zavesa1", "Бычье поглощение", 12, "Times New Roman", Aqua);
ObjectSet("zavesa1", OBJPROP_XDISTANCE, 50);
ObjectSet("zavesa1", OBJPROP_YDISTANCE, 35);
bay=true;
str=true;
}
//++++++++++++++++++++++++++++++++++++++++++++
//здесь рисуются стрелки на RSI
if (str==true && bay==true && ExtMapBuffer1[cnt]>ExtMapBuffer2[cnt] && par<H-((H-L)/2) && par1<H-((H-L)/2))
{
ObjectCreate("up1xv"+Op, OBJ_ARROW, 1, Time[0], ExtMapBuffer1[cnt]-10);
ObjectSet("up1xv"+Op, OBJPROP_ARROWCODE, 225);
str=false;
ObjectSet("up1xv"+Op, OBJPROP_COLOR, Aqua);
}
if (str1==true && bay==false && ExtMapBuffer1[cnt]<ExtMapBuffer2[cnt] && par>H-((H-L)/2) && par1>H-((H-L)/2))
{
ObjectCreate("down1xv"+Op, OBJ_ARROW, 1, Time[0], ExtMapBuffer1[cnt]+10);
ObjectSet("down1xv"+Op, OBJPROP_ARROWCODE, 226);
str1=false;
ObjectSet("down"+Op, OBJPROP_COLOR, Yellow);
}
return(0);
}
//+------------------------------------------------------------------+
хочу написать советника по этому индикатору, пытаюсь воспользоваться функцией iCstom
//+------------------------------------------------------------------+
//| олол.mq4 |
//| Evgenio |
//| https://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Evgenio"
#property link "https://www.metaquotes.net"
//+------------------------------------------------------------------+
int start()
{
double val=iCustom(NULL,60,"qw",0,0); // double val=iCustom(NULL,60,"qw",6,12,0,350,0,0);
Print (val);
return(0);
}
//+------------------------------------------------------------------+
в журнал пишется следующее
2009.07.21 11:52:34 TestGenerator: unmatched data error (volume limit 4249 at 2009.06.16 16:00 exceeded)
а потом
2009.07.21 11:52:43 2009.06.02 11:16 олол AUDUSD,H1:
в чем проблема подскажите ????
С уважением !