советник (Expert) на основе АМА

 

ВОТ ЭКСПЕРТ КОД ДЛИННЫЙ...

Файлы:
 

прошу проверить корректноть кода.

см. ниже.

 

ЛАДНО ДЕЛАЮ ап...

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

говорю сразу, весь код у меня гибрид поэтому сильно не ругать..

//--------------------------------------------------------------- 5 --
   // Торговые критерии
   MA_1_t=iCustom(Symbol(),0,"AMA_optimized",0,1); // МА_1
   MA_2_t=iCustom(Symbol(),0,"AMA_optimized",0,2); // МА_2
   MA_3_t=iCustom(Symbol(),0,"AMA_optimized",0,3); // МА_2
   MA_4_t=iCustom(Symbol(),0,"AMA_optimized",0,4); // МА_4      

   deltaAMA=MathAbs(MA_1_t - MA_2_t);
   deltaAMA2=MathAbs(MA_2_t - MA_3_t);
               
   if (deltaAMA > dK*Point && deltaAMA2 < dK*Point)         // Если разница между
     {                                          // ..МА 1 и 2 большая
       Opn_B=true;                 // Критерий откр. Buy
        //Cls_S=true;              // Критерий закр. Sell
     }
   if (deltaAMA < dK*Point && deltaAMA2 > dK*Point)         // Если разница между
     {                                          // ..МА 1 и 2 большая
       Opn_S=true;             // Критерий откр. Sell
        //Cls_B=true;          // Критерий закр. Buy
     }
//--------------------------------------------------------------- 6 --

iCustom(Symbol(),0,"AMA_optimized",0,1); - это то что здесь лежало см. выше если что.

в чем проблема.

1. на визульном тесте не всегда там где енадо открывает! Может в алгоритме что напутал

deltaAMA > dK*Point && deltaAMA2 < dK*Point - такое сравнения я делаю что бы открыватся на первом сигнале, а не каждом красном шарике имеется в виду

(СИНИЙ, СИНИЙ, КРАСНЫЙ, НУЛЕВОЙ БАР(еще не сформировался)) - например 4 бара, и когда мы видим что начались красные, продаем

с синими на оборот.

т.е. заходить только при смене направления!

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

 

вы бы лучше показали участок кода, где у вас ф-ция OrderSend()...

ошибка 130 - это неправильные стопы...

 

вот сигналы красны ложные сработали а хотелось бы по синему

 

Еще вопрос, если вдруг с советником не получиться!

         if (MathAbs(AMAbuffer[i]-AMAbuffer[i+1])>dK*Point)
            {
            if (AMAbuffer[i]-AMAbuffer[i+1]>0)  {
                 val1=AMAbuffer[i]; // это синие
                        if (i==1) { 
                          if (direction==-1) {Comment("НАЧАЛО СИНИХ");
                                              Comment("НАЧАЛО СИНИХ Время сигнала ",lasttime);
                                              SendMail("blue", "Время сигнала "+lasttime);
                                              Print("DADASDSADSAD");
                                              }
                          direction=1;
                        } 
                       
                 }

                 else { val2=AMAbuffer[i];  
                        if (i==1) {
                        if (direction==1) {  Comment("НАЧАЛО КРАСНЫХ"); 
                                             Comment("НАЧАЛО КРАСНЫХ Время сигнала ",lasttime);
                                             SendMail("red", "Время сигнала "+lasttime);
                                             Print("DADASDSADSAD");
                                             }
                        direction=-1;                     
                        } // это красные
                        
                  }
            } 
         }
      else

Это часть кода с индикатора АМА, хотел добавить отправку на почту сигналов!

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

if (i==1) { // это условие говоорит что бар должен быть равен 1, т.е. на уже сформировавшийся бар смотрим и он последний (ну скажем 1)

потом надо проверить если до него направление было иное надо отправить письмо.

direction - я этим воспользовался, но по ходу дела не правельно как-то?

остновная проблема что можно было по топому смотреть на 2 бар, и сравнить его с 1, если они одинаковые то напраавление не меняется,

однако АМА иногда не показывает сигналы, уходит на флет, тогда сравнивать не счем :((

 

Посмотрите, как я делал, может поможет - AMKA_Expert


Только индикатор я брал -  AMKA
 

iCustom(Symbol(), 0, "AMKA", AMKAPeriod, FastEMAPeriod,

у вас "AMKA" которую Рош оптимизировал?

а так вроде оно, я его еще по изучаю, потом результаты,

СПАСИБО
 

Дамы и госпада вот мы и на финишной примой, есть пора вопросов

может кто поможет еще на пару каверзных вопросов ответит, поможет

Эксперт написан ордера открывает, однако есть пару ньюансов которые что я не мог уобойти

скрин прилогаю



//--------------------------------------------------------------- 5 --
   // Торговые критерии
   MA_1_t=iCustom(Symbol(),0,"AMA_optimized",1,1); // МА_1
   MA_2_t=iCustom(Symbol(),0,"AMA_optimized",2,1); // МА_2
   MA_3_t=iCustom(Symbol(),0,"AMA_optimized",1,2); // МА_2
   MA_4_t=iCustom(Symbol(),0,"AMA_optimized",2,2); // МА_4      

   deltaAMA=MathAbs(MA_1_t - MA_2_t);
   deltaAMA2=MathAbs(MA_2_t - MA_3_t);
               
   if (MA_1_t!=0 && MA_3_t==0)         // Если разница между
     {                             // ..МА 1 и 2 большая
       Opn_B=true;                 // Критерий откр. Buy
        //Cls_S=true;              // Критерий закр. Sell
     }
   if (MA_2_t!=0 && MA_4_t==0)         // Если разница между
     {                                          // ..МА 1 и 2 большая
       Opn_S=true;             // Критерий откр. Sell
        //Cls_B=true;          // Критерий закр. Buy
     }
//--------------------------------------------------------------- 6 --
Файлы:
 

Приведу список проблем может кто сможет помочь

Проблемы:

1. На 0 баре по правильному сигналу могут сработать тайкпрофиты, и тогда советник открывается еще раз.

это ярко видно на красном баре, 5 по счету слева.

решение: как поставить условие чтобы открывалась только одна сделка на одном сигнале?


2. Не точно выполняются условия.

расмотрим две последовательности сигналов (кр.- это красный шарик, сн- это синий шарик, ПУСТО - это когда шариков вообще нет)

на класическом сигнале вроде открывается верно

например1:

кр. кр. сн. 0(бар) - здесь надо отркыть позицию БАЙ

тоже самое только в обратку

сн.сн.кр.0(бар) - здесь надо отркыть позицию СЕЛЛ

ОДНАКО:

могут проходить такие сигнал

сн. сн. ПУСТО сн. 0(бар) - здесь открывается позиция БАЙ (это не првильно), я подозреваю что, это условие

MA_3_t==0

как раз и удовлетворяет этому тоже. поэтому если кто может с условиями помочь, как тут и что КАКИЕ УСЛОВИЯ ПОСТАВИТЬ?

3. ПРОБЛЕМА

Это проблема с iCustom- я там параметры на угад поставил,

не знал как рабоет кастом и какие параметры передает индикатоор

поэтому по смыслу у меня так:

MA_1_t=iCustom(Symbol(),0,"AMA_optimized",1,1); // с конца 1-это первый бар (не путать с нулевым), 1 - сигнал синий
MA_2_t=iCustom(Symbol(),0,"AMA_optimized",2,1); // с конца 1-это первый бар (не путать с нулевым), 2 - сигнал красный
MA_3_t=iCustom(Symbol(),0,"AMA_optimized",1,2); // с конца 2-это второй бар (не путать с нулевым), 1 - сигнал синий
MA_4_t=iCustom(Symbol(),0,"AMA_optimized",2,2); // с конца 2-это второй бар (не путать с нулевым), 2 - сигнал красный

но мне кажеться что это, ( 1 - сигнал синий с айКастома) не правельно я думаю

подправте меня с параметрами


deltaAMA - надо это использовать или нет?

 

Решен вопрос как сделать так что бы открывалось только по одному сигналу на один бар

ПРОБЛЕМА номер один решена, ура

// Торговые критерии
   MA_1_t=iCustom(Symbol(),0,"AMA_optimized",1,1); // МА_1
   MA_2_t=iCustom(Symbol(),0,"AMA_optimized",2,1); // МА_2
   MA_3_t=iCustom(Symbol(),0,"AMA_optimized",1,2); // МА_2
   MA_4_t=iCustom(Symbol(),0,"AMA_optimized",2,2); // МА_4      
//---------------------------------------------------------------- 5.1 БЛОК ФЛАГА
   static datetime New_Time;  
   bool New_Bar;   

   if(New_Time!=Time[0])
     {
      New_Time=Time[0]; 
      New_Bar=true;  
     } else { New_Bar=false; }
//---------------------------------------------------------------- 5.1 БЛОК ФЛАГА
     
   if (MA_1_t!=0 && MA_3_t==0)                                       // Если разница между
     {                                                               // ..МА 1 и 2 большая
       if (New_Bar==true) Opn_B=true; New_Bar=false;                 // Критерий откр. Buy
        //Cls_S=true;                                                // Критерий закр. Sell
     }
   if (MA_2_t!=0 && MA_4_t==0)                                       // Если разница между
     {                                                               // ..МА 1 и 2 большая
       if (New_Bar==true) Opn_S=true; New_Bar=false;                 // Критерий откр. Sell
        //Cls_B=true;                                                // Критерий закр. Buy
     }
//--------------------------------------------------------------- 6 --