[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 137

 
hoz:

 На данный момент задача такая: fastMa пересекла slowMa вверх... значит мы ищем где купить. Далее ждём когда цена т.е. Ask (т.к. рассматриваем покупки) дойдёт до fastMa (ну я так понимаю точное значение тут не будет, нужен +- какое-то отклонение, а это переенная i_thresholdFromMa) и как только цена подошла к fastMa +- i_thresholdFromMa эксперт должен выставить BUYSTOP по цене (fastMa + buyHear * pt).

То что у меня вышло в одном терминале не работало, в другом работало, в третьем работает не всегда. В общем что-то не то.. 

Последний вариант функции покупки вот:

Вот входные параметры:

 

 Ошибки на скрине видны (в OrderSend() подаётся цена выше красной машки, а ордер как видно на скрине - ниже....):

Несколько дней отсутствовал... Я вот думаю - а те же параметры имеют машки, накинутые на график, что и машки, использующиеся в вычислениях? Может собака там порылась?

(В код до сих пор некогда было вникать и разбирать).

Я бы сделал функцию, например:

//-----------------------------------------------------------------------------+
double ma(int MAperiod, int MAmethod, int MAshift) {return (iMA(Symbol(), Period(), MAperiod, 0, MAmethod, PRICE_OPEN,MAshift));}
//-----------------------------------------------------------------------------+

и вызывал её для получения параметров

 

Здравствуйте, подскажите пожалуйста! Сработал сигнал индикатора на покупку, открываю ордер только после, подтверждения, двух следующих свечей вверх.

 
Top2n:

Здравствуйте, подскажите пожалуйста! Сработал сигнал индикатора на покупку, открываю ордер только после, подтверждения, двух следующих свечей вверх.


Так и проверяйте, чтобы одновременно было две последних свечи вверх и условие на открытие ордера два бара назад.
 
Roger:

Так и проверяйте, чтобы одновременно было две последних свечи вверх и условие на открытие ордера два бара назад.

это как сделать?

 if (bay_min == true) сработал сигнал на покупку ждем подтверждение
  
 if (Open[1]<Close[1] && Open[2]<Close[2] )
   
 if (Bars(2).............


а если так, сигнал сработал ждем подтверждение, только после сигала 2 бара вверх или вниз.

Надо, чтоб он как то запомнил бар на сигнале, бар после сигнала, сравнил их если два восходящих или нисходящих,то ....

 
Top2n:

это как сделать?


а если так, сигнал сработал ждем подтверждение, только после сигала 2 бара вверх или вниз.

Надо, чтоб он как то запомнил бар на сигнале, бар после сигнала, сравнил их если два восходящих или нисходящих,то ....

Покажите, как Вы получили bay_min.
 
Top2n:

это как сделать?


а если так, сигнал сработал ждем подтверждение, только после сигала 2 бара вверх или вниз.

Надо, чтоб он как то запомнил бар на сигнале, бар после сигнала, сравнил их если два восходящих или нисходящих,то ....



if (bay_min == true)   datetime T=Time[0] //сработал сигнал на покупку запоминаем время  бара

if(iBarShift(NULL,0,T)==2) //по времени, сигнал был на 2 баре
   {   
  if (Open[1]<Close[1] && Open[2]<Close[2] )   //и эти бары бичьи 
     { 
    // что-то делаем
     }
   }
   
// я думаю, как-то так.
 
вопрос к знатокам

Пишу простенького советника, сразу же столкнулся с массой проблем.

условие

Запомнить цену закрытия текущего бара внести её в переменную Startprice, если предыдцщий 4-й бар лежал в скользящей.


Если условие удовлетворено отрисовать значёк показывающий цену закрытия бара, т.е Startprice.

  Что у меня получилось, отрисовывается значок, но только один раз, а нужно что бы каждый раз.
 
  Цена закрытия бара не совпадает с ценой Startprice расхождения в 0.00001 почему и как с этим бороться?
 
  Пробывал округления и обрезание до 5-ти знаков не помогло(
 
  В журнале с помощью принта вызываю значение Startprice, показывается число только до 4-х знаков и меньше.
 
  Как добиться такой же точности как в окне данных терминала?
 

  Эта трабла со знаками после запятой относиться и к самой скользящей. Если вызывать её значения через принт, то больше 4-х знаков не получается в журнале.



#property copyright "Zuly"


 extern int MA_Period = 50; //периуд Ма
extern int MA_Method =MODE_SMA;     //Метод усреднения скользящего среднего. Может быть любым из значений методов скользящего среднего (Moving Average):
                              //*MODE_SMA 
                              
 extern int Maximum_History = 0;         //Ограничение истории для расчетов, если 0 то расчет всей истории
 
   
    
   //начало кода советника
int start()


{      
    double MA4;                                // Значение МА на 4 баре 
    
    double Startprice;
    
   { 
   MA4=iMA(NULL,0,MA_Period,0,MA_Method,PRICE_CLOSE,4); 
 
   
                       if  (Low[4]< MA4 && MA4 < High[4]) //условия если 4-я свеча лежит в скользящей
  
  {    
  
   Startprice=Close[0];
  
    //   Startprice=NormalizeDouble(Close[0],5); // пробуем округлить до 5-го знака, не помогло 
 
    //  Startprice=MathFloor(Close[0]*100000)/100000; // пробуем обрезать до 5-го знака не помогло
      
  
  
     
      //Print (Startprice); // распечатаем Startprice
     
      
   datetime TmR1=Time[0]; // запоминаем время текущего бара? 

   

   
       ObjectCreate("Rep1",OBJ_ARROW, 0, TmR1, Startprice); // создаем обьект 
      ObjectSet("Rep1", OBJPROP_COLOR, White); // устанавливаем обьект на график
       ObjectSet("Rep1", OBJPROP_ARROWCODE,71); 
      
     return(0); 
 
 
 
}} }    
   
параметры и время тестирования
 
 
Используйте для вывода DoubleToStr(число, Digits). Вместо Digits можно вписать нужную вам точность. К имени значка добавьте время бара, на котором устанавливаете значок.
 
artmedia70:
Используйте для вывода DoubleToStr(число, Digits). Вместо Digits можно вписать нужную вам точность. К имени значка добавьте время бара, на котором устанавливаете значок.


если так

Startprice=DoubleToStr(Close[0],5);

то не работает, ругается на '=' - incompatible types    C:\fortest\experts\sve.mq4 (34, 14)

Как правильно это можно записать? 

Спасибо что ответили, я над этим уже неделю бьюсь )

 
artmedia70:
Используйте для вывода DoubleToStr(число, Digits). Вместо Digits можно вписать нужную вам точность. К имени значка добавьте время бара, на котором устанавливаете значок.

а для вывода, понял принт выдаёт только всегда 4-ре и меньше знака.

тогда если Print (DoubleToStr(Startprice,5)); // распечатаем Startprice

то выдаёт 5.

Но вот как время бара добавить 

Это строка не добавляет время бара?

  datetime TmR1=Time[0]; 
Причина обращения: