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

 

Расскажу суть идеи.

Необходимо находить или определять первую попавшуюся любую стрелку в истории от текущего бара.

Не важно какая она будет - вверх или вниз.

(А)И потом это нахождение сохранить в переменной или флаге. Например GlobalFlag =-1(если стрелка вниз) и +1 если вверх.

Потом цена пошла дальше вперёд, и снова нарисовалась какая-то стрелка.

В советнике ведь цикл поиска запускается каждый раз с новым тиком ?

Этот цикл снова запустился и нашёл только что нарисованную стрелку и снова сохранили в переменной или флаге, то

есть выполнился пункт А.

Вот такая вот идея.

Зачем это нужно заморачиваться с флагом и прочим.?

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

Например, GlobalFlag=+1 (стрелка вверх) и другой индюк сигналит вверх, значит входим в рынок.

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


А как вам этот код который писал ранее ?Он реализует чего мне хочется?

То есть, мне не нужно вычислять на какой свече стрелка, какая цена там и прочее.Главное зафиксировать факт

наличия стрелки и её направление.

А можно присваивать вместо +1 и -1 true и falce ???? или нельзя?


double DataIndUP, DataIndDN;
int    i, GlobalFlag, nBars = 250 ;  // nBars = количество проверяемых баров вглубь истории

for (i=0; i<nBars; i++) 
{
   DataIndUP = iCustom(Symbol(),Period(),"Имя индюшонка", через запятую все параметры индюка , номер буфера стрелки вверх, i)
   DataIndDN = iCustom(Symbol(),Period(),"Имя индюшонка", через запятую все параметры индюка , номер буфера стрелки вниз, i)
   if (DataIndUP !=EMPTY_VALUE)     // или if (DataIndUP !=0) // найдена стрелка вверх
                                    // всё зависит от того, что выдаёт буфер при отсутствии стрелки 
                                    // нажмите Ctrl+D и посмотрите что вам в окне данных будет показано
      GlobalFlag=+1                 // присвоение значения +1(стрелка вверх)  переменной 
      Break;                        //выход из цикла, так как  нашлась последняя стрелка
if (DataIndDN !=EMPTY_VALUE)     // или if (DataIndDN !=0) // найдена стрелка вниз
                                    // всё зависит от того, что выдаёт буфер при отсутствии стрелки 
                                    // нажмите Ctrl+D и посмотрите что вам в окне данных будет показано
      GlobalFlag=-1                 // присвоение значения -1(стрелка вниз) переменной
      Break;                        //выход из цикла, так как  нашлась последняя стрелка
}
 
Tupen:


эт тока начало.


итак, вход точка А -- продажа и покупка стоит в 4 пунктах. 1 вариант поведения - цена идет вниз, - фиксируем прибыль скажем через 5 пунктов от точки входа. - точки А ( чило пунктов до фиксации прибыли в процессе подгоки думаю изменится, пока минимум) тоже если цена пойдет вверх. т.е. программе сразу нужно будет поставить 4 ордера, )) это можно запрограммировать?
 
Roman.:



Пост удален за скрытый мат

 
Vinin:

Пост удален за скрытый мат


    Извините, великодушно, не смог сдержаться. Сыт сказками венского леса...
 

напишите пожалуйста програмку с 4 ордерами. надо посмотреть на демо и до конца додумать с вариантом разворота

 
Tupen:

напишите пожалуйста програмку с 4 ордерами. надо посмотреть на демо и до конца додумать с вариантом разворота


 Смотрите ветку "Лавина" - там досконально все уже продумано со "всем", в т.ч. "додумано с вариантами разворотов.

Зачем изобретать велосипед... Все уже людьми давно додумано. Читайте, анализируйте, пользуйте и пользуйтесь.

Сами к "Этому" велосипеду (читай, решению) не скоро подойдете... 

 

Подскажите, почему нет цикличности? В тестере советник открывает всего две сделки.

extern int F = 8; //период быстрой МА
extern int S = 20; //период медл.МА
extern double Lots = 0.1; // лот ордера
int Slippage = 5; // проскальзывание в пп.
int Magic = 123; // магический номер эксперта
int ticketsell;  
int ticketbuy;
int start()
{
 double MAfast = iMA(NULL,0,F,0,MODE_SMA,PRICE_CLOSE,1);
double MAslow = iMA(NULL,0,S,0,MODE_SMA,PRICE_CLOSE,1);
// ордера с тикетом ticketsell в терминале нету ИЛИ он закрылся И быстрая МА ниже медленной, продаем !
if ( (OrderSelect(ticketsell,SELECT_BY_TICKET,MODE_TRADES) == false ) && MAfast < MAslow )
{
// если у нас при этом был противоположный ордер, бай, его закроем :
if ( OrderSelect(ticketbuy,SELECT_BY_TICKET,MODE_TRADES) == true )
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, CLR_NONE);
ticketsell = OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,0,Magic,0,Red);
}
if ( (OrderSelect(ticketbuy,SELECT_BY_TICKET,MODE_TRADES) == false ) && MAfast > MAslow )
{
   if ( OrderSelect(ticketsell,SELECT_BY_TICKET,MODE_TRADES) == true )
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, CLR_NONE);
ticketbuy = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,0,Magic,0,Blue);
}
return(0);
}
 

 

mirgha Попробуйте так

extern int F = 8; //период быстрой МА
extern int S = 20; //период медл.МА
extern double Lots = 0.1; // лот ордера
int Slippage = 5; // проскальзывание в пп.
int Magic = 123; // магический номер эксперта
int ticketsell;  
int ticketbuy;

int start()
{
   double MAfast = iMA(NULL,0,F,0,MODE_SMA,PRICE_CLOSE,1);
   double MAslow = iMA(NULL,0,S,0,MODE_SMA,PRICE_CLOSE,1); 
   
   ticketsell = -1;
   ticketbuy = -1;
   for (int i = 0; i < OrdersTotal(); i++)
   {
      OrderSelect( i, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
      {
         if (OrderType() == OP_SELL) ticketsell = OrderTicket();
         if (OrderType() == OP_BUY)  ticketbuy  = OrderTicket();
      }
    }
   // ордера с тикетом ticketsell в терминале нету ИЛИ он закрылся И быстрая МА ниже медленной, продаем !
   if ( (OrderSelect(ticketsell,SELECT_BY_TICKET,MODE_TRADES) == false ) && MAfast < MAslow )
   {
      // если у нас при этом был противоположный ордер, бай, его закроем :
      if ( OrderSelect(ticketbuy,SELECT_BY_TICKET,MODE_TRADES) == true )
         OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, CLR_NONE);
      ticketsell = OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,0,Magic,0,Red);
   } 
   if ( (OrderSelect(ticketbuy,SELECT_BY_TICKET,MODE_TRADES) == false ) && MAfast > MAslow )
   {
      if ( OrderSelect(ticketsell,SELECT_BY_TICKET,MODE_TRADES) == true )
         OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, CLR_NONE);
      ticketbuy = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,0,Magic,0,Blue);
   }
   return(0);
} 
 
Спасибо!
 

Мой вопрос остался без ответа.

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

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