советник не работет в тестере стратегий

 

Я вообще только начал курить mql набросал простенького советника, воткнул в тестер стратегий - а он ничего не выдает вобщем-то... Ыот код который сваял

//определение цен закрытия предыдущих трех свечей
level_close1 = iClose(NULL, PERIOD_D1, 3); //цена третьей свечи
level_close2 = iClose(NULL, PERIOD_D1, 2); //цена второй свечи
level_close3 = iClose(NULL, PERIOD_D1, 1); //цена первой свечи
//определение цен открытия предыдущих трех свечей
level_open1 = iOpen(NULL, PERIOD_D1, 3); //цена третьей свечи
level_open2 = iOpen(NULL, PERIOD_D1, 2); //цена второй свечи
level_open3 = iOpen(NULL, PERIOD_D1, 1); //цена первой свечи

Print(level_open1);
Print(level_open2);
Print(level_open3);
Print(level_close1);
Print(level_close2);
Print(level_close3);
//----
if (level_open1 > level_close1 && level_open2 > level_close2 && level_open2 > level_close3) // все три свечи белые
{
OrderSend(Symbol(), OP_BUY, lot, Ask, 2, Bid+SL,Bid+TP);
}

if (level_open1 < level_close1 && level_open2 < level_close2 && level_open2 < level_close3) // все три свечи белые
{
OrderSend(Symbol(), OP_SELL, lot, Ask, 2, Bid+SL,Bid+TP);
}



//----
return(0);
}
 
byka:

Я вообще только начал курить mql набросал простенького советника, воткнул в тестер стратегий - а он ничего не выдает вобщем-то... Ыот код который сваял


Это у Вас не простенький советник - это определение торговых критериев.

Вписывайте эти торговые критерии в этого или этого советника и пробуйте.

 
Roman.:


Это у Вас не простенький советник - это определение торговых критериев.

Вписывайте эти торговые критерии в этого или этого советника и пробуйте.


неет, если вы имеете, я вас в заблужденье ввел малость. это не весь код, это часть кода а именно текст модуля старт.

весь - вот


//+------------------------------------------------------------------+
//| svech.mq4 |
//| Copyright © 2011, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"

//--- input parameters
extern int SL=10;
extern int TP=10;
extern double lot=0.1;

double level_close1;
double level_close2;
double level_close3;
double level_open1;
double level_open2;
double level_open3;

bool Work=true; // Эксперт будет работать.

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
// Предварит.обработка
if(Bars < Period_MA_2) // Недостаточно баров
{
Alert("Недостаточно баров в окне. Эксперт не работает.");
return; // Выход из start()
}
if(Work==false) // Критическая ошибка
{
Alert("Критическая ошибка. Эксперт не работает.");
return; // Выход из start()
}//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//определение цен закрытия предыдущих трех свечей
level_close1 = iClose(NULL, PERIOD_D1, 3); //цена третьей свечи
level_close2 = iClose(NULL, PERIOD_D1, 2); //цена второй свечи
level_close3 = iClose(NULL, PERIOD_D1, 1); //цена первой свечи
//определение цен открытия предыдущих трех свечей
level_open1 = iOpen(NULL, PERIOD_D1, 3); //цена третьей свечи
level_open2 = iOpen(NULL, PERIOD_D1, 2); //цена второй свечи
level_open3 = iOpen(NULL, PERIOD_D1, 1); //цена первой свечи

Print(level_open1);
Print(level_open2);
Print(level_open3);
Print(level_close1);
Print(level_close2);
Print(level_close3);
//----
if (level_open1 > level_close1 && level_open2 > level_close2 && level_open2 > level_close3) // все три свечи белые
{
OrderSend(Symbol(), OP_BUY, lot, Ask, 2, Bid+SL,Bid+TP);
}

if (level_open1 < level_close1 && level_open2 < level_close2 && level_open2 < level_close3) // все три свечи белые
{
OrderSend(Symbol(), OP_SELL, lot, Ask, 2, Bid+SL,Bid+TP);
}



//----
return(0);
}
//+------------------------------------------------------------------+

 
byka:

неет, если вы имеете, я вас в заблужденье ввел малость. это не весь код, это часть кода а именно текст модуля старт.

весь - вот


//+------------------------------------------------------------------+
//| svech.mq4 |
//| Copyright © 2011, MetaQuotes Software Corp. |
//| https://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link "https://www.metaquotes.net"

//--- input parameters
extern int SL=10;
extern int TP=10;
extern double lot=0.1;

double level_close1;
double level_close2;
double level_close3;
double level_open1;
double level_open2;
double level_open3;

bool Work=true; // Эксперт будет работать.

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
// Предварит.обработка
if(Bars < Period_MA_2) // Недостаточно баров
{
Alert("Недостаточно баров в окне. Эксперт не работает.");
return; // Выход из start()
}
if(Work==false) // Критическая ошибка
{
Alert("Критическая ошибка. Эксперт не работает.");
return; // Выход из start()
}//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//определение цен закрытия предыдущих трех свечей
level_close1 = iClose(NULL, PERIOD_D1, 3); //цена третьей свечи
level_close2 = iClose(NULL, PERIOD_D1, 2); //цена второй свечи
level_close3 = iClose(NULL, PERIOD_D1, 1); //цена первой свечи
//определение цен открытия предыдущих трех свечей
level_open1 = iOpen(NULL, PERIOD_D1, 3); //цена третьей свечи
level_open2 = iOpen(NULL, PERIOD_D1, 2); //цена второй свечи
level_open3 = iOpen(NULL, PERIOD_D1, 1); //цена первой свечи

Print(level_open1);
Print(level_open2);
Print(level_open3);
Print(level_close1);
Print(level_close2);
Print(level_close3);
//----
if (level_open1 > level_close1 && level_open2 > level_close2 && level_open2 > level_close3) // все три свечи белые
{
OrderSend(Symbol(), OP_BUY, lot, Ask, 2, Bid+SL,Bid+TP);
}

if (level_open1 < level_close1 && level_open2 < level_close2 && level_open2 < level_close3) // все три свечи белые
{
OrderSend(Symbol(), OP_SELL, lot, Ask, 2, Bid+SL,Bid+TP);
}



//----
return(0);
}
//+------------------------------------------------------------------+


Вы не парьтесь - вставьте в работающего сова свои торговые критерии и расчет индикаторов и все. Пробуйте.
 
я кодить научиться хочу, поэтому и парюсь. Не пойму чего в нем нехватает.
 
byka:
я кодить научиться хочу, поэтому и парюсь. Не пойму чего в нем нехватает.

Что во вкладке "Журнал"?
 
byka:
я кодить научиться хочу, поэтому и парюсь. Не пойму чего в нем нехватает.


Читайте описание сов в учебнике, по тем ссылкам, что Вам дал. У Вас в коде - куча ошибок, в частности в выставлении (открытии) ордеров.

Сравните Ваш код с правильным открытием:

{                                   //.. не достигнут успех
      if (StopLoss<Level_new)            // Если меньше допустимого..
         StopLoss=Level_new;             // .. то допустимый
      if (TakeProfit<Level_new)          // Если меньше допустимого..
         TakeProfit=Level_new;           // ..то допустимый
      MN=TimeCurrent();                  // Простой MagicNumber
      Inform(13,Tip);                    // Сообщение о попытке откр
      if (Tip==0)                        // Будем открывать Buy
        {
         SL=Bid - StopLoss*  Point;      // StopLoss   (цена)
         TP=Bid + TakeProfit*Point;      // TakeProfit (цена)
         Ticket=OrderSend(Symbol(),0,Lots_New,Ask,2,SL,TP,"",MN);
        }
      if (Tip==1)                        // Будем открывать Sell
        {
         SL=Ask + StopLoss*  Point;      // StopLoss   (цена)
         TP=Ask - TakeProfit*Point;      // TakeProfit (цена)
         Ticket=OrderSend(Symbol(),1,Lots_New,Bid,2,SL,TP,"",MN);
        }
      //--------------------------------------------------------- 4 --
      if (Ticket<0)                       // Не получилось :( 
        {                                 // Поинтересуемся ошибками:
         if(Errors(GetLastError())==false)// Если ошибка непреодолимая
            return;                       // .. то уходим.
        }

Читайте сначала учебник и не парьтесь попусту (у Вас элементарные ошибки из-за не знания основ), а уже потом - пускайтесь во все тяжкие...

 

Этот блок меняйте на этот:

//----
 if (level_open1 > level_close1 && level_open2 > level_close2 && level_open2 > level_close3) // все три свечи белые
 {
 OrderSend(Symbol(), OP_BUY, lot, Ask, 2, Bid - SL*Point, Bid+TP*Point);
 }

 if (level_open1 < level_close1 && level_open2 < level_close2 && level_open2 < level_close3) // все три свечи белые
 {
 OrderSend(Symbol(), OP_SELL, lot, Bid, 2, Ask+SL*Point,Ask-TP*Point);
 }
 
byka:

А зачем Вам переменная level_open3? :))

 
byka:
я кодить научиться хочу, поэтому и парюсь. Не пойму чего в нем нехватает.

Очевидно три дневных свечи в одну сторону на истории у Вас не встречалось.Попробуйде сократить до двух.
 
byka:
я кодить научиться хочу, поэтому и парюсь. Не пойму чего в нем нехватает.

И еще вот сдесь && level_open2 > level_close3 .наверное Вы хотели использоать открытие и закрытие одной свечи, а получается с разных.
Причина обращения: