Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 236

 
Yaroslav Nykula:

... проходят все валютные пары, где присутствует USD ...

 

Предположу, что в коде есть расчет используемой маржи от средств для торговли - попробуйте счет открыть не в USD и посмотрите, будет ли проходить тест.
 

 

Предположу, что в коде есть расчет используемой маржи от средств для торговли - попробуйте счет открыть не в USD и посмотрите, будет ли проходить тест.



В коде нет расчёта  "используемой маржи от средств для торговли" ... а в конце своего первого поста  я заметил  "переключение вида валюты депозита в тестере проблему не устраняет."

 
Yaroslav Nykula:

В коде нет расчёта  "используемой маржи от средств для торговли" ... а в конце своего первого поста  я заметил  "переключение вида валюты депозита в тестере проблему не устраняет."

 

Тогда мои телепатические способности окончились - выкладывайте код.

 

Извините за вопрос, я умею в советник вставлять внешний индикатор с помощью буфера...   А в этом индикаторе буфера нет,  как мне получить верхнюю и нижнюю цену.




//+------------------------------------------------------------------+

//|                                                trendlinesDay.mq4 |

//|                      Copyright © 2008, MetaQuotes Software Corp. |

//|                                        https://www.metaquotes.net |

//+------------------------------------------------------------------+

#property copyright "nsi2000"

#property link      "http://www.expert-mt4.nm.ru"

//----

#property indicator_chart_window

//---- input parameters

extern int nPeriod=10;

extern int Limit=350;

   double Up[];

   double Dn[];

///---- int Widners Oscilator

int cnt,nCurBar=0;

//+------------------------------------------------------------------+

//| Custom indicator initialization function                         |

//+------------------------------------------------------------------+

int init()

  {      

//---- Output in Char

   for(cnt=0; cnt<=5; cnt++)

     {

      ObjectCreate("WSO-"+cnt,OBJ_HLINE,0,0,0);

      ObjectSet("WSO-"+cnt,OBJPROP_COLOR,Red);

      if(cnt<5)

        {

         ObjectCreate("Trend DN-"+cnt,OBJ_TREND,0,0,0,0,0);

         ObjectSet("Trend DN-"+cnt,OBJPROP_COLOR,Magenta);

        }

      //----

      ObjectCreate("WRO-"+cnt,OBJ_HLINE,0,0,0);

      ObjectSet("WRO-"+cnt,OBJPROP_COLOR,Blue);

      if(cnt<5)

        {

         ObjectCreate("Trend UP-"+cnt,OBJ_TREND,0,0,0,0,0);

         ObjectSet("Trend Up-"+cnt,OBJPROP_COLOR,Aqua);

        }

     }

//----

   return(0);

  }

//+------------------------------------------------------------------+

//| Custor indicator deinitialization function                       |

//+------------------------------------------------------------------+

int deinit()

  {

//---- TODO: add your code here

   for(cnt=0; cnt<=5; cnt++)

     {

      ObjectDelete("Trend UP-"+cnt);

      ObjectDelete("Trend DN-"+cnt);

      ObjectDelete("WSO-"+cnt);

      ObjectDelete("WRO-"+cnt);

     }

//----

   return(0);

  }

//+------------------------------------------------------------------+

//| Custom indicator iteration function                              |

//+------------------------------------------------------------------+

int start()

  {

//---- TODO: add your code here


   double r1,r2,r3,r4,r5,r6;

   int rt1,rt2,rt3,rt4,rt5,rt6;

   double s1,s2,s3,s4,s5,s6;

   int st1,st2,st3,st4,st5,st6;


//---- Линии сопротивления и поддержки

   if(Bars<Limit) Limit=Bars-nPeriod;

   for(nCurBar=Limit; nCurBar>0; nCurBar--)

     {

      if(Low[nCurBar+(nPeriod-1)/2]==Low[Lowest(NULL,0,MODE_LOW,nPeriod,nCurBar)])

        {

         s6=s5; s5=s4; s4=s3; s3=s2; s2=s1; s1=Low[nCurBar+(nPeriod-1)/2];

         st6=st5; st5=st4; st4=st3; st3=st2; st2=st1; st1=nCurBar+(nPeriod-1)/2;

        }

      if(High[nCurBar+(nPeriod-1)/2]==High[Highest(NULL,0,MODE_HIGH,nPeriod,nCurBar)])

        {

         r6=r5; r5=r4; r4=r3; r3=r2; r2=r1; r1=High[nCurBar+(nPeriod-1)/2];

         rt6=rt5; rt5=rt4; rt4=rt3; rt3=rt2; rt2=rt1; rt1=nCurBar+(nPeriod-1)/2;

        }

     }

//---- Move Object in Chart


   ObjectMove("Trend DN-0",1,Time[st1],s1);

   ObjectMove("Trend DN-0",0,Time[st2],s2);


//----

   ObjectMove("Trend UP-0",1,Time[rt1],r1);

   ObjectMove("Trend UP-0",0,Time[rt2],r2);

//----

   return(0);

  }

//+------------------------------------------------------------------+


 
Vyacheslav Kornev:

Извините за вопрос, я умею в советник вставлять внешний индикатор с помощью буфера...   А в этом индикаторе буфера нет,  как мне получить верхнюю и нижнюю цену


взять на графике граф.объекты c с именами "Trend DN-0","Trend UP-0" (те линии которыми индикатор обозначает какие-то уровни) и считать нужные данные из них

 
Maxim Kuznetsov:

взять на графике граф.объекты c с именами "Trend DN-0","Trend UP-0" (те линии которыми индикатор обозначает какие-то уровни) и считать нужные данные из них


напишите, пожалуйста, как? это в самом индикаторе сделать? и потом из этих значений сделать 2 буфера, чтобы их использовать в советнике?

напишите в каком месте как брать цену?

 
Vyacheslav Kornev:

напишите, пожалуйста, как? это в самом индикаторе сделать? и потом из этих значений сделать 2 буфера, чтобы их использовать в советнике?

напишите в каком месте как брать цену?

В индикаторе уже есть все данные чтобы рассчитать по ним два буфера и отрисовать их.

А вам предложили не индикатор менять, а из советника прочитать данные линий, рисуемых индикатором.
Правда это накладывает ограничения на использование тестера - только в визуальном режиме сможете советник тестировать.

 
Artyom Trishkin:

В индикаторе уже есть все данные чтобы рассчитать по ним два буфера и отрисовать их.

А вам предложили не индикатор менять, а из советника прочитать данные линий, рисуемых индикатором.
Правда это накладывает ограничения на использование тестера - только в визуальном режиме сможете советник тестировать.


То есть я должен прописать в индикаторе

#property indicator_buffers 2

double BufferUp[], BufferDn[];


int OnInit()

{

SetIndexBuffer(0, BufferUp)

SetIndexBuffer(1, BufferDn)

}



А потом конкретно с чем? я должен связать эти 2 буфера?

 
Vyacheslav Kornev:

То есть я должен прописать в индикаторе

#property indicator_buffers 2

double BufferUp[], BufferDn[];


int OnInit()

{

SetIndexBuffer(0, BufferUp)

SetIndexBuffer(1, BufferDn)

}



А потом конкретно с чем? я должен связать эти 2 буфера?

Смотрите: у вас в коде перемещаются линии:

ObjectMove("Trend DN-0",1,Time[st1],s1);
ObjectMove("Trend DN-0",0,Time[st2],s2);
//----
ObjectMove("Trend UP-0",1,Time[rt1],r1);
ObjectMove("Trend UP-0",0,Time[rt2],r2);

Время опорных точек линий есть - Time[st1], Time[st2] и цена этих опорных точек s1, s2 - для одной линии,
Time[rt1], Time[rt2], r1, r2 - для другой линии.

Используя уравнение прямой можно рассчитать значение буфера для каждого бара между этими точками и вписать это значение в буфер.

 
Artyom Trishkin:

Смотрите: у вас в коде перемещаются линии:

Время опорных точек линий есть - Time[st1], Time[st2] и цена этих опорных точек s1, s2 - для одной линии,
Time[rt1], Time[rt2], r1, r2 - для другой линии.

Используя уравнение прямой можно рассчитать значение буфера для каждого бара между этими точками и вписать это значение в буфер.


то есть просто цену линии над баром не взять... Я не умею считать уравнение прямой если возможно, напишите как вот это все должно выглядеть.

И,  вообще значение надо брать не между точками, а над 0 или 1 баром

Причина обращения: