[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 274

 
igrok2008 >>:

Здравствуйте.

Есть такой эксперт SimpleMA, я его немног подправил под себя, самую малость...:-))) и обозвал MASimple_v2x, код выкладываю

потом попробовал усовершенствовать Но НО НО

после эксперемента выдаёт ошибку

ЧТО Я НЕПРАВИЛЬНО НАТВОРИЛ?????????????

Заранее благодарен



Попробуй так:

вместо - if MAF_0 - MAF_1= A
             if MAS_0 - MAS_1= B

вот это - double A = MAF_0 - MAF_1;

              double B = MAS_0 - MAS_1;

 

Если я правильно понял, Вы отслеживаете ситуацию, когда обе МА движутся в одном направлении. Вас ждет еще много интересных открытий :))

//это выражение не имеет смысла, if здесь лишний
   if MAF_0 - MAF_1= A
   if MAS_0 - MAS_1= B
//если требовалось определить разницу значений МА на 1-ом и нулевом баре, то можно так
   double A = MAF_0 - MAF_1;
   double B = MAS_0 - MAS_1;
 
rushman >>:

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

Насколько мне известно  - нет! Только при открытии нового лота. А Какой смысл увеличивать лоты после произведенной зделки? Или Вы имеете в виду что видете как  открылись в нужном направлении а денежек хочется побольше и еще больше? 

 
alsu 23.10.2009 10:22
>>

И что теперь с этим делать?

NormalizeDouble(Bid,4);   //:))))


Возможно лучше будет (универсальнее):

NormalizeDouble(Bid,Digits);
 

Помогите найти ошибку в коде.При компиляции ошибки нет а расчеты и сделки не проходят( Заранее спасибо находящимся здесь Профи.

//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
extern int    EMA1 = 14;                                  // Период 1-й EМА
extern int    EMA2 = 48;                                  // Период 2-й EМА
extern int    EMA3 = 144;                                  // Период 3-й EМА                             
extern int period=12;
extern int porog =3;
extern int metod =1;
extern int metod2=1;
extern int prise =0;
extern double SL =  1000;                                  // СтопЛосс ордера
extern double TP =  500;                                  // ТэйкПрофит ордера
extern double Lots= 0.1;  
//--------------------------------------------------------------------------------------------
int
   New_Bar,                                              // 0/1 Факт образования нового бара
   Time_0,                                               // Время начала нового бара
   total;                                                // Крличество открытых ордеров
//--------------------------------------------------------------------------------------------
double 
   Lot,                                                  // Количество лотов
   Norm,                                                 // Предыдущее значение 1-й МА (розов)
   Fast,                                                  // Текущее    значение 1-й МА (розов)
   Slow,                                                // Текущее    значение 2-й МА(голубая)
   Signal[];
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
int init()  
   {
//============================================================================================
   SL = SL*Point;                                        // SL в пунктах
   TP = TP*Point;                                        // ТР в пунктах
   return;
//============================================================================================
   }  
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
int start()  
   {
//============================================================================================
   total=OrdersTotal();                                  // Общее количество ордеров
   if (total==2)return;                                  // Уже открыты оба ордера

//----------------------------------------------------------------------------- Новый бар ----
   New_Bar=0;                                            // Для начала обнулимся
   if (Time_0 != Time[0])                                // Если уже другое время начала бара
      {
      New_Bar= 1;                                        // А вот и новый бар
      Time_0 = Time[0];                                  // Запомним время начала нового бара
      } 
//--------------------------------------------------------------------------------------------
//---расчет тренда ввех или вниз (XMA)
   int limit;
   double tmp1,tmp2;
   int counted_bars=IndicatorCounted();
   int i;
   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
   for (i = limit;i>=0;i--){
     tmp1=iMA(Symbol(),0,period,0,metod,prise,i);
     tmp2=iMA(Symbol(),0,period,1,metod2,prise,i); 
     if(MathAbs(tmp1-tmp2)>=porog*Point)
     {       Signal[i]=tmp2;      }
     
//--------------------------------------------------------------------------------------------
   Fast  =iMA(NULL,0, EMA1, 0,MODE_EMA, PRICE_CLOSE, 0);// Текущее    значение 1-й EМА
   Norm =iMA(NULL,0, EMA2, 0,MODE_EMA, PRICE_CLOSE, 0);// Предыдущее значение 2-й EМА
   Slow=iMA(NULL,0, EMA3, 0,MODE_EMA, PRICE_CLOSE, 0);// Текущее    значение 3-й EМА
   
//--------------------------------------------------------------------------------------------
   if (Fast>Norm && Norm>Slow && New_Bar==1 && Close[i]>Signal[i]) Open_Buy();      // Движение снизу вверх = откр. Buy
   if (Fast<Norm && Norm<Slow && New_Bar==1 && Close[i]<Signal[i]) Open_Sell();     // Движение сверху вниз = откр. Sell
   
   }
      return;
//============================================================================================
   }  
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
int Open_Buy()  
   {
   if (total==1)
      {
      OrderSelect(0, SELECT_BY_POS);                     // Выделим ордер
      if (OrderType()==0)return;                         // Если он buy, то не открываемся
      }
   OrderSend(Symbol(),0, Lots, Ask, 0, Ask-SL, Ask+TP, "", 0, 0, Blue);// Открываемся
   return;
   }
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
int Open_Sell() 
   {
   if (total==1)
      {
      OrderSelect(0, SELECT_BY_POS);                     // Выделим ордер
      if (OrderType()==1)return;                         // Если он sell, то не открываемся
      }
   OrderSend(Symbol(),1, Lots, Bid, 0, Bid+SL, Bid-TP, "", 0, 0, Red);// Открываемся
   return;
   }
 

Всем привет! Подскажите, пожалуйста!!! Есть несколько вопросов, сам не справляюсь:

1. Как сделать так, чтобы на одном баре открывался только один ордер?

2. Есть несколько условий на покупку и продажу, какую для этого использовать функцию?

3. Как организовать перенос открытой позиции в безубыток?

4. Как все три условия применить в коде советника (если можно, на примере)?

Жду ваших ответов. Заранее огромное спасибо.

 
Piboli >>:

Здравствуйте. Вот случайно наткнулся на статью по интересующей меня теме. А именно это: Выбор размера окна. .... Оптимальные результаты достигаются

в случае выбора размера окна порядка фрактальной размерности данных. Для ее вычисления следует “нарезать” ряд скользящим окном достаточно большого размера

(см. Рисунок 5 ), а потом вычислить фрактальную размерность полученных данных с помощью, например, Box-count метода....

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


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

УРА ЗАРАБОТАЛО!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Спасибо maniac-у и granit77.

Свежий анекдот. Урок литературы в компьютерном классе, проводит учитель информатики.

-Герасим был, это.....этим......ну......а а звуковой карты у него не было :-)))))))))))))))))

Ну а по поводу эксперта, попробывал я укоротить торговое условие. Ну что ли для лучшего восприятия.

То есть, если есть математические вычисления, то их лучше вызывать через double.

 
Maniac >>:

Всем привет! Подскажите, пожалуйста!!! Есть несколько вопросов, сам не справляюсь:

1. Как сделать так, чтобы на одном баре открывался только один ордер?

....... ...

Жду ваших ответов. Заранее огромное спасибо.

https://www.mql5.com/ru/forum/102366

//-----------------

https://www.mql5.com/ru/forum/113983/page2

//-------------

https://www.mql5.com/ru/forum/110184

 
morok >>:

Помогите найти ошибку в коде.При компиляции ошибки нет а расчеты и сделки не проходят( Заранее спасибо находящимся здесь Профи.

Первое, что бросается в глаза в вашем коде и в чем я не уверен, так это корректность использования функции IndicatorCounted() в советнике. Не проверял, но полагаю, что правильная ее работа гарантируется только в пользовательских индикаторах.

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