Jump to content
makmel

Просьба доделать эксперт

Recommended Posts

Registr
В OrderSend() нормализовать биды и аски не нужно. Это не ошибка, прото в этом нет необходимости
... а что если в тестере-то запустить советник и посмотреть журнал... Там точно написано - нужно или не нужно... :D
offset считаем как диапазон предыдущих days2check дней(avrange)/offsetK.

p=((24*60)/Period());

Это количество дневных свечей?... :shock: Странно... Или что это?

for(i=1;i<=days2check;i++) 
{//4
    daj[i]=(High[Highest(NULL,0,MODE_HIGH,p,p*i+1)]
    -Low[Lowest(NULL,0,MODE_LOW,p,p*i+1)]);
    totalrange=totalrange+daj[i];
    avrange=MathRound((totalrange/i)/Point);
}//4

int Highest( string symbol, int timeframe, int type, int count=WHOLE_ARRAY, int start=0)

 

Возвращает индекс найденного наибольшего значения (смещение относительно текущего бара).

 

Параметры:

 

symbol - Символьное имя инструмента, на данных которого будет производиться поиск. NULL означает текущий символ.

timeframe - Период. Может быть одним из периодов графика. 0 означает период текущего графика.

type - Идентификатор таймсерии. Может быть любым из значений иденитификаторов таймсерий.

count - Число элементов таймсерии (в направлении от текущего бара в сторону возрастания индекса), среди которых должен быть произведен поиск.

start - Смещение (относительно текущего) начального бара, с которого начинается поиск наибольшего значения.

 

Пример:

 

double val;

// расчет самого верхнего значения в дипазоне с 5 элементов в 25 элементов

// индикатор помещает в диаграмму символ и рамку времени диаграмм индикатора

val=High[Highest(NULL,0,MODE_HIGH,20,4)];

 

... Однако странно как-то вычисляется avrange:

avrange=MathRound((totalrange/i)/Point);

... зачем каждый раз нужно делить totalrange на коэффициент итерации, это что нельзя сделать после завершения цикла? :? А что если так? :

  p=((24*60)/Period())*days2check;
 totalrange==(High[Highest(NULL,0,MODE_HIGH,p,0)]
              -Low[Lowest(NULL,0,MODE_LOW,p,0)]);
 avrange=MathRound((totalrange/days2check)/Point);

По поводу логики советника - постараюсь вникнуть... :D Однако искренне убеждён, что алгоритм работы должен быть в функции Start(), а не раснесён по разным не понятным функциям со странными названиями, типа Levels_Defining_8()... Если у меня, например, есть функция OpenPosition(), то по названию видно, чем она занимается... Вот, кстати, сама функция. Заметь, она используется только для открытий позиций и не для чего больше... Ни каких дополнительных проверок условий, не связанных непосредственно с открытием позиций, в ней не выполняется:

//+----------------------------------------------------------------------------+
//| Функция открытия торговой позиции                               function///|
//+----------------------------------------------------------------------------+
int OpenPosition(int Type,string Toll,double SizeOfLot,int Accuracy,
   int FixingOfLoss,int FixingOfProfit,string Note,int UniqueNumber,
   color OperColor, bool UseSound=false,string NameOfSound="")
{//1
  double OpenPrice=0,SL=0,TP=0;int ticket=0,index=0,err=0,attempt=0;
  datetime InitialTime=CurTime();
  if((Type>1)||(Type<0))
  {//2
     WriteLineInFile(esFileNameOfReport,GetCurRusTime()
     +"Не удалось открыть позицию , причина: неверный тип операции");
     Print(TimeToStr(CurTime(),TIME_SECONDS)+" InitialTime: "
     +TimeToStr(InitialTime,TIME_SECONDS)
     +" Не удалось открыть позицию , причина: неверный тип операции");
     return(-1);   
  }//2
  if(Type==OP_BUY)
  {//3
     while(ticket<=0)
     {//4   
        while(!IsTradeAllowed()) Sleep(1000);
        RefreshRates();
        OpenPrice = NormalizeDouble(Ask,Digits);
        SL = OpenPrice - FixingOfLoss   * Point;
        TP = OpenPrice + FixingOfProfit * Point;      
        ticket=OrderSend(Toll,OP_BUY,SizeOfLot,OpenPrice,Accuracy,SL,TP,Note,
        UniqueNumber,0,OperColor);
        if(ticket>0)
        {//5
           if(!IsTesting())
           {//6
              if((UseSound)&&(CheckSoundFileName(NameOfSound)=="")) 
              { PlaySound(NameOfSound); }
           }//6
           index=StringFind(Note," ", 0);
           WriteLineInFile(esFileNameOfReport,GetCurRusTime()
           +"Открыта позиция Buy тикет "+ticket+" внутренний № "
           +StringSubstr(Note,0,index)+" по цене: "
           +DoubleToStr(OpenPrice,Digits));
           Sleep(5000);
           return(ticket);
        }//5
        else
        {//7
           err=GetLastError();attempt++;
           WriteLineInFile(esFileNameOfReport,GetCurRusTime()
           +"Не удалось открыть ордер Buy, причина: "+ErrorDescription(err));
           Print(TimeToStr(CurTime(),TIME_SECONDS)+" InitialTime: "
           +TimeToStr(InitialTime,TIME_SECONDS)
           +" Не удалось открыть ордер Buy, причина: "+ErrorDescription(err));
           if((err==135)&&(Accuracy<11)) Accuracy++;  
           if(((CurTime()-InitialTime)>180)||(attempt==10)) break;
           Sleep(1000);
        }//7
     }//4   
  }//3
  if(Type==OP_SELL)
  {//8
     while(ticket<=0)
     {//9   
        while(!IsTradeAllowed()) Sleep(1000);
        RefreshRates();
        OpenPrice = NormalizeDouble(Bid,Digits);
        SL = OpenPrice + FixingOfLoss   * Point;
        TP = OpenPrice - FixingOfProfit * Point;    
        ticket=OrderSend(Toll,OP_SELL,SizeOfLot,OpenPrice,Accuracy,SL,TP,Note,
        UniqueNumber,0,OperColor);
        if(ticket>0)
        {//10
           if(!IsTesting())
           {//11
              if((UseSound)&&(CheckSoundFileName(NameOfSound)=="")) 
              { PlaySound(NameOfSound); }
           }//11
           index=StringFind(Note," ", 0);
           WriteLineInFile(esFileNameOfReport,GetCurRusTime()
           +"Открыта позиция Sell тикет "+ticket+" внутренний № "
           +StringSubstr(Note,0,index)+" по цене: "
           +DoubleToStr(OpenPrice,Digits));
           Sleep(5000);
           return(ticket);
        }//10
        else
        {//12
           err=GetLastError();attempt++;
           WriteLineInFile(esFileNameOfReport,GetCurRusTime()
           +"Не удалось открыть ордер Sell, причина: "+ErrorDescription(err));
           Print(TimeToStr(CurTime(),TIME_SECONDS)+" InitialTime: "
           +TimeToStr(InitialTime,TIME_SECONDS)
           +" Не удалось открыть ордер Sell, причина: "+ErrorDescription(err));
           if((err==135)&&(Accuracy<11)) Accuracy++;  
           if(((CurTime()-InitialTime)>180)||(attempt==10)) break;
           Sleep(1000);
        }//12
     }//9
  }//8
  return(-1);
}//1
//+----------------------------------------------------------------------------+
//| Конец функции открытия торговой позиции                         function///|
//+----------------------------------------------------------------------------+

... вообщем

if (Close[1]>=buyprice_8)

, например, из void Opening_8(), желательно вынести в код основной программы, т.е. в функцию Start()... :? А функцию Opening_8() обозвать более понятным названием... :roll:


Миражи - это наша жизнь...

Share this post


Link to post
Share on other sites
трендмен

Протестил этого зверя, вроде на бэк тесте не сливает, даже неплохо зарабатывает! Внушает доверие поначалу...

С понедельника поставлю на демо тест. Хоть выделенку сегодня поставил, круто 525 кб,сек!


{Супермаркет для трейдера} Подробнее...

Share this post


Link to post
Share on other sites
трендмен

А какую лучше версию поставить на тест из тех, которые имеются?


{Супермаркет для трейдера} Подробнее...

Share this post


Link to post
Share on other sites
makmel
А какую лучше версию поставить на тест из тех, которые имеются?

 

Привет.

Пока никакую неставь эксперт под реал доделовать надо.

Share this post


Link to post
Share on other sites
трендмен
А какую лучше версию поставить на тест из тех, которые имеются?

 

Привет.

Пока никакую неставь эксперт под реал доделовать надо.

 

плохо, будем ждать, тады...


{Супермаркет для трейдера} Подробнее...

Share this post


Link to post
Share on other sites
Registr
Цитата:

Сообщение от 3172552

Цитата:

Сообщение от goldenlion

 

Сообщение от Goldenlion

 

price = MathRound(price*10000)/10000;

stoploss = MathRound(stoploss*10000)/10000;

takeprofit = MathRound(takeprofit*10000)/10000;

 

 

 

 

а что это? зачем?

 

 

 

Отбрасывание знаков после 4го разряда после точки.

Если в результате неких вычислений цена получается такая 1.2022435, то МТ4 отказывается ее принимать, этот код обрубает цену до такого вида - 1.2022.

... вот ещё известное тебе сообщение, только парень ещё не очень разбирается в MQL4, но говорит о том же...
Так не будет он торговать на реале... Предопределённые переменные Ask и Bid, которые передаются в функцию OrderSend() содержат 8 знаков после нуля и очень часто все разряды отличны от нуля. В функцию же OrderSend() нужно передавать эти переменные с Digits знаками после нуля, иначе возникает ошибка...

Миражи - это наша жизнь...

Share this post


Link to post
Share on other sites
3172552
p=((24*60)/Period()); 

 

Это количество дневных свечей?... Странно... Или что это?

Это количество свечей для проверки диапазона. Для н1 р(период)=24(часа в день)

 

 

А что если так? : Код:

p=((24*60)/Period())*days2check;

totalrange==(High[Highest(NULL,0,MODE_HIGH,p,0)]

-Low[Lowest(NULL,0,MODE_LOW,p,0)]);

avrange=MathRound((totalrange/days2check)/Point);

 

 

Согласен, так проще(с точки зрения программиста- единственно правильный путь). А результат вычислений такой же? Думаю, нет. Это, на мой взгляд, совсем другой алгоритм. Мой вариант больше похож на

   avrange=(iATR(NULL,1440,Days2Check,1)/Point);

Но только смещённый на 8 или 12 свечей- CheckHour. Иначе система теряет логику.

 

Однако искренне убеждён, что алгоритм работы должен быть в функции Start(), а не раснесён по разным не понятным функциям со странными названиями, типа Levels_Defining_8()...

Вам виднее- Вы программист, я писал как я мог, мне всё понятно, хотя считаю, что Вы правы. Все функции вызываются из старта либо по времени, либо по количеству открытых позиций...

По поводу логики советника - постараюсь вникнуть...

Вы посмотрите простой Scalp- там всё гораздо проще

 

например, есть функция OpenPosition(), то по названию видно, чем она занимается...

LevelsDefinig_8 -функция определения уровней на продажу и покупку , которая вызывается в 8 часов. Что не понятно? У Вас функция открытия конечно побогаче...

В общем, я очень рад, что человек разбирающийся возьмётся доделать наконец то этот советник под реал. Правда, не ясно, будет ли советник и дальше зарабатывать...а по поводу нормализации бидив-асков - лучше на всякий случай нормализовать, хотя у меня в журнале по этому поводу ничего не написано( видимо из-за отсутствия каких-то команд). Спасибо в любом случае, хоть пару уроков программирования получил.

Share this post


Link to post
Share on other sites
3172552
... вот ещё известное тебе сообщение, только парень ещё не очень разбирается в MQL4, но говорит о том же...

Так это он про ВЫЧИСЛЯЕМЫЕ значения цен говорил... Ну да ладно, действительно, на всякий случай нормализую, не повредит точно. Вы скажите- какие ошибки у Вас вылазят, которые на результат плохо влияют?

Share this post


Link to post
Share on other sites
трендмен

А параметры для всех валют одинаковые? Или нужно подбирать?

 

По идее можно открыться на все депо на несколько валют, дабы повысить профитность и снизить риски...


{Супермаркет для трейдера} Подробнее...

Share this post


Link to post
Share on other sites
трендмен

А обязательно советника нужно круглые сутки включенным держать или можно включить во время выставления позиций ордеров и потом отключиться? Как он устроен?


{Супермаркет для трейдера} Подробнее...

Share this post


Link to post
Share on other sites
Registr
Вы скажите- какие ошибки у Вас вылазят, которые на результат плохо влияют?
... тык ведь - неверная цена... :D Но, что интерестно, это уже было сказано, когда устраняешь эти ошибки и следовательно количество сделок возрастает, то прибыльность советника падает. Может быть попробывать воспользоваться этим фактом... ну естественно, грамотно воспользоваться... :D Что же касается структуры программы, то я не сомневаюсь, что Вам всё понятно, ещё бы, кому как не Вам... :D Однако, если бы алгоритм управления советником был сосредоточен в одном месте, да ещё и с комментариями, то он был бы понятен не только Вам... :D ... ну а...

 p=((24*60)/Period())*days2check; 
 totalrange==(High[Highest(NULL,0,MODE_HIGH,p,0)] 
              -Low[Lowest(NULL,0,MODE_LOW,p,0)]); 
 avrange=MathRound((totalrange/days2check)/Point); 

... наиболее точно соответствует приведенному Вами условию

offset считаем как диапазон предыдущих days2check дней(avrange)/offsetK
... В Вашем случае, Вы считаете что-то не то... :D Вообщем, посмотрим... :roll:

Миражи - это наша жизнь...

Share this post


Link to post
Share on other sites
3172552

По другим валютам не тестировал вообще. Попробуйте подбирать параметры. Совсем не обязательно тестировать на всех тиках- результаты быстрого теста такие же. Рекомендую тестировать на н1 быстрым тестом. О ночной торговле- если осталась открытая позиция(ии), то советник должен быть включен, если нет- спите спокойно и включайте с утра до 8-ми по МТ. Но всё это только после того, как его доделают.

Share this post


Link to post
Share on other sites
Registr
Рекомендую тестировать на н1 быстрым тестом
...а по поводу нормализации бидив-асков - лучше на всякий случай нормализовать, хотя у меня в журнале по этому поводу ничего не написано
... потому и не написано... :D

Миражи - это наша жизнь...

Share this post


Link to post
Share on other sites
3172552

Извините, писАл быстро и невдумчиво. Имелся ввиду СРЕДНИЙ диапазон предыдущих дней, точнее средний диапазон 24-х часовых периодов, аналогичных проверочному, то есть начинаются эти периоды в checkhour, и в это же время и заканчиваются.

Исправил во всём советнике Ask NormalizeDouble(Ask,4),то же самое проделал с бидом. Количество сделок и результат совпадают, да и до этого в журнале у меня ничего не было сказано о неправильной цене. Как же у Вас так получается?

Share this post


Link to post
Share on other sites
3172552

Я за Вами не успеваю писАть. Я на всех тиках тоже тестировал- ничего в журнале нет...

Share this post


Link to post
Share on other sites
Registr
Как же у Вас так получается?
А качество моделирования какое? Вот, специально вернул всё назад... :D

02:07:50 Scalp_8_12: loaded successfully

02:07:50 Scalp_8_12 inputs: Hours2Check=9; CloseHour=9; Days2Check=9; CheckMode=1; LossK=3; ChannelK=1.5; CheckHour_8=8; ProfitK_8=2; OffsetK_8=2; CheckHour_12=12; ProfitK_12=3; OffsetK_12=2.5; TradesPerDayAllowed=1;

02:07:50 2001.01.09 13:00 Russtdlib EURUSD,H1: loaded successfully

02:07:50 2001.01.09 13:00 Scalp_8_12: OrderSend failed with error #130 : недопустимая ценаTrying again #1

02:07:50 2001.01.09 13:00 Scalp_8_12: OrderSend failed with error #130 : недопустимая ценаTrying again #2

02:07:50 2001.01.09 13:00 Scalp_8_12: OrderSend failed with error #130 : недопустимая ценаTrying again #3

02:07:50 2001.01.09 13:00 Scalp_8_12: OrderSend failed with error #130 : недопустимая ценаTrying again #4

02:07:50 2001.01.09 13:00 Scalp_8_12: OrderSend failed with error #130 : недопустимая ценаTrying again #5

02:07:50 2001.01.09 13:00 Scalp_8_12: Warning!!!Last try failed!

02:07:50 2001.01.09 13:00 Scalp_8_12: OrderSend failed with error #130 : недопустимая ценаTrying again #1

02:07:50 2001.01.09 13:00 Scalp_8_12: OrderSend failed with error #130 : недопустимая ценаTrying again #2

02:07:50 2001.01.09 13:00 Scalp_8_12: OrderSend failed with error #130 : недопустимая ценаTrying again #3

02:07:50 2001.01.09 13:00 Scalp_8_12: OrderSend failed with error #130 : недопустимая ценаTrying again #4

02:07:50 2001.01.09 13:00 Scalp_8_12: OrderSend failed with error #130 : недопустимая ценаTrying again #5

02:07:50 2001.01.09 13:00 Scalp_8_12: Warning!!!Last try failed!

02:07:50 2001.01.09 13:00 Scalp_8_12: OrderSend failed with error #130 : недопустимая ценаTrying again #1

02:07:50 2001.01.09 13:00 Scalp_8_12: OrderSend failed with error #130 : недопустимая ценаTrying again #2

02:07:50 2001.01.09 13:00 Scalp_8_12: OrderSend failed with error #130 : недопустимая ценаTrying again #3

02:07:50 2001.01.09 13:00 Scalp_8_12: OrderSend failed with error #130 : недопустимая ценаTrying again #4

02:07:50 2001.01.09 13:00 Scalp_8_12: OrderSend failed with error #130 : недопустимая ценаTrying again #5

02:07:50 2001.01.09 13:00 Scalp_8_12: Warning!!!Last try failed!

и т.д. ... а в реале ведь, будет то же самое... позиция просто не откроется :!:

Миражи - это наша жизнь...

Share this post


Link to post
Share on other sites
3172552

О блин! А Вы журнал внимательно смотрели? У меня этих ошибок не было, так как я всегда тестирую только с 2003года- многие говорят, что рынок сильно изменился. Так вот, поставил я на тест с2001-го - те же ошибки вылазят даже на быстром тесте и после того, как я нормализовал ВСЕ цены, но ошибки заканчиваются в конце 2002-го года. У меня история с Виака, видимо, у Вас тоже. Как это понимать???

Share this post


Link to post
Share on other sites
3172552

Я всё понял. У меня в продажных ордерах тейк=1.000. Поменяйте на 0 или на 0.5 и будет Вам счастье. Никакого отношения к нормализации нет, но спасибо за то, что указали наоплошность, ведь если цена вернётся к отметке 1.0000(как это было в 2000-2002 годах), то советник перестанет открываться.

Share this post


Link to post
Share on other sites
Registr

Нет, не будет счастья, пока не разберу всё на запчасти... :D


Миражи - это наша жизнь...

Share this post


Link to post
Share on other sites
Registr

Млин, я сделал так...

   int liQuantityCandle=0;//количество свечей для вычисления
   /*Вычисляем количество свечей для расчёта...*/
   liQuantityCandle=MathRound(eiCheckHour*(60/Period()));
   if(eiCheckMinute>0)
   {//5
      liQuantityCandle=liQuantityCandle+MathRound(eiCheckMinute/Period());
   }//5

   WriteLineInFile(esFileNameOfReport,GetCurRusTime()
   +"количество свечей: "+liQuantityCandle);

   /*... вычисляем максимальную и минимальную цену временного диапазона с 0 часов 
       до eiCheckHour часов и eiCheckMinute минут...*/


   int i;//Переменная для итераций 
   double ldHighOfRange=0;//наибольшая цена диапазона 
   double ldLowOfRange=0;//наименьшая цена диапазона 



   if(eiModeСalcExtreme==0)
   {//8
      ldHighOfRange = High[Highest(NULL,0,MODE_HIGH,liQuantityCandle,0)];
      ldLowOfRange  = Low[Lowest(NULL,0,MODE_LOW,liQuantityCandle,0)];
   }//8
   else if(eiModeСalcExtreme==1)
   {//9
      ldHighOfRange = Close[Highest(NULL,0,MODE_CLOSE,liQuantityCandle,0)];
      ldLowOfRange  = Close[Lowest(NULL,0,MODE_CLOSE,liQuantityCandle,0)];
   }//9
   else { Alert("Неверно задан режим вычисления экстремумов!"); }

   int liAvRange=0;//средний дневной диапазон
   int p=((24*60)/Period());//количество свечей текущего периода в 1 сутках
   double totalrange=0;//сумматор дневных диапазонов
   double AverDayRange;//переменная для получения дневного диапазона
   double OffSet=0;//вычисляемый коэффициент

   if(eiModeСalcAvRange==0)
   {//10
      for(i=1;i<=eiDays2Check;i++)
      {//11
         AverDayRange=(High[Highest(NULL,0,MODE_HIGH,p,p*i+1)]
                       -Low[Lowest(NULL,0,MODE_LOW,p,p*i+1)]);
         totalrange=totalrange+AverDayRange;
         liAvRange=MathRound((totalrange/i)/Point);                   
      }//11 
   }//10
   else if(eiModeСalcAvRange==1)
   {//12
      for( i=1;i<=eiDays2Check;i++)
      {//13
         AverDayRange=MathAbs(Close[p*i+liQuantityCandle]
                       -Close[p*(i-1)+liQuantityCandle]);
         totalrange=totalrange+AverDayRange;
         liAvRange=MathRound((totalrange/i)/Point);
      }//13    
   }//12
   else if(eiModeСalcAvRange==2)
   {//14
      p=((24*60)/Period())*eiDays2Check; 
      totalrange=(High[Highest(NULL,0,MODE_HIGH,p,0)] 
                   -Low[Lowest(NULL,0,MODE_LOW,p,0)]); 
      liAvRange=MathRound((totalrange/eiDays2Check)/Point);     
   }//14
   else if(eiModeСalcAvRange==3)
   {//15
      p=((24*60)/Period())*eiDays2Check; 
      totalrange=(Close[Highest(NULL,0,MODE_CLOSE,p,0)] 
                   -Close[Lowest(NULL,0,MODE_CLOSE,p,0)]); 
      liAvRange=MathRound((totalrange/eiDays2Check)/Point);     
   }//15
   else { Alert("Неверно задан режим вычисления среднего дневного диапазона!"); }

   OffSet=MathRound(liAvRange/edOffSetK);
   gdTopRod    = NormalizeDouble(ldHighOfRange+OffSet*Point,Digits);
   gdBottomRod = NormalizeDouble(ldLowOfRange-OffSet*Point,Digits);

... попробую и так, и сяк, авось что-то из этого выйдет... :D


Миражи - это наша жизнь...

Share this post


Link to post
Share on other sites
Registr

А нафига массив daj_12, например, собственно массив? Я заменил на обыкновенную переменную double, получается то же самое... :D


Миражи - это наша жизнь...

Share this post


Link to post
Share on other sites
Registr

А вот это, Вы у себя читали?

23:43:46 2001.08.13 16:09 Scalp_8_12 EURUSD,H1: Warning!!!Last try failed!

23:43:46 2001.08.13 16:09 Scalp_8_12 EURUSD,H1: Too risky Trade! Add some money to account

23:43:46 2001.08.13 16:09 Scalp_8_12 EURUSD,H1: invalid lots number for OrderSend function

23:43:46 2001.08.13 16:09 Scalp_8_12 EURUSD,H1: OrderSend failed with error #4051 : недопустимое функциональное значение параметраTrying again #1

23:43:46 2001.08.13 16:09 Scalp_8_12 EURUSD,H1: Too risky Trade! Add some money to account

23:43:46 2001.08.13 16:09 Scalp_8_12 EURUSD,H1: invalid lots number for OrderSend function

23:43:46 2001.08.13 16:09 Scalp_8_12 EURUSD,H1: OrderSend failed with error #4051 : недопустимое функциональное значение параметраTrying again #2

23:43:46 2001.08.13 16:09 Scalp_8_12 EURUSD,H1: Too risky Trade! Add some money to account

23:43:46 2001.08.13 16:09 Scalp_8_12 EURUSD,H1: invalid lots number for OrderSend function

23:43:46 2001.08.13 16:09 Scalp_8_12 EURUSD,H1: OrderSend failed with error #4051 : недопустимое функциональное значение параметраTrying again #3

... и т.д.

... поправил... :D

 if (Lots<0.1) 
 {
   Print("Too risky Trade! Add some money to account");
   SendMail("Too risky Trade! Add some money to account","Too risky Trade! Add some money to account");
   Lots=0.1;
 }


Миражи - это наша жизнь...

Share this post


Link to post
Share on other sites
Registr
У меня в продажных ордерах тейк=1.000. Поменяйте на 0 или на 0.5 и будет Вам счастье
... а зачем тогда нужны...

profit_8=MathRound(avrange_8/ProfitK_8);

profit_12=MathRound(avrange_12/ProfitK_12);

... если они нигде не используются?... :D


Миражи - это наша жизнь...

Share this post


Link to post
Share on other sites
Registr

... ну вот, пошли логические ошибки... :D

if(Hour()==CheckHour_12)
{Levels_Defining_12(); CheckDay_12=Day();}

... понимаешь, у тебя на протяжении челого часа советник вычисляет одно и то же. Конечно, процессору больше нечем заняться... :D

поправил...

if((Hour()==CheckHour_12)&&(Minute()==0)&&(Seconds()==0))
{Levels_Defining_12(); CheckDay_12=Day();}


Миражи - это наша жизнь...

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.

  • Recently Browsing   0 members

    No registered users viewing this page.

×