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

 
obla4ko:
нельзя советник уподоблять дубине - это вещь тонкая :))), виртуальная, я бы казала, и естественно, должен реагировать на подлоги в истории. Если он не реагировал на подчистки, то представляю как бы тормозил бы на реале - в год 100 баксов на 10К - в лучшем случае... ну так проще деньги в банке хранить - там процентов 3-6 дают!:))

))) Кончено, проще! Кто ж спорит... // А кто говорил, что будет легко? )))

Как вариант - переходите на биржу. Там подобной фигни в принципе не бывает. А так... при всех - как бы цензурно назвать - хм... странностях работать и на форе можно.

Лучший способ - это, конечно, тест на реале. Если заложенные в советник принципы верны (а это точно можно проверить на тестере), то, закладывая форс-мажорные меры на реал, торговля будет в ++. Может, не в +++++++, как в тестере, но все же...)))

Кстати, вырезка гэпов, ктр. сводят с ума индикаторы, из котировочного потока в этом сильно помогает. Можете глянуть в моих кодах - Kill Gap.

 

Techno:
obla4ko, создайте переменную типа datetime x, и пусть это будет время открытие бара, на котором произошел стоплосс. А в условии открытия поставте, что (Time[0]!=x). При этом x должно обновляться при новом сработавшем стоплосе. Это первый вариант. И второй как я уже в третий раз пишу, после срабатывания стопа включить ожидание 1 бар, это будет совершенно тоже самое, не логично разве?

У меня в прошлом посте выложена часть кода, отвечающая за открытие позиции. Вы не могли бы вот сказанное вами тут вписать в него - как говорится "лучше один раз увидеть,чем...." :)
 

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

На стр 71 этой ветки granit77 писал очень интересную весч!

Извините, что встреваю, поделюсь ламерским способом удобной записи множества условий. При наладке легко добавлять/убирать, не заботясь о скобках, и все наглядно. 
if (true
    && StochK_0<StochD_1
    && StochD_1 > 80 
    && cci_0 < cci_1    
    && cci_0 > 100 
    //&& .... а это я пока убрал     
   )

вот по образцу и попытался кое что сделать

if(((Sto_0>Sto_1&&Sto_0< 20)&&(OsMA_0>OsMA_1&&OsMA_0<-P)&&(Macd_0>Macd_1&&Macd_0<-N)))
// это основа
if(true
      &&Sto_0>Sto_1&&Sto_0< 20
      &&OsMA_0>OsMA_1&&OsMA_0<-P
      &&Macd_0>Macd_1&&Macd_0<-N
      )//а это то что получилось

спрашиваю потому что уж больно необычно это.....

 

Почему вот это работает и считает правильно увеличение значения переменной на 10 процентов:

TStartS = MathRound(TStartS+TStartS*0.1);

... а вот это не увеличивает:

TStartS = MathRound(TStartS+TStartS/100*PercentTakePr); // где PercentTakePr - внешняя переменная, равна 10, 20, 30, и т.д. ...
в чём разница - убейте - не пойму...
 
artmedia70:

Почему вот это работает и считает правильно увеличение значения переменной на 10 процентов:

... а вот это не увеличивает:

в чём разница - убейте - не пойму...





а может так

TStartS = MathRound(TStartS+(TStartS/100*PercentTakePr)); 
 

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

Тут по ходу выяснилось, что профи давно так пишут, даже лучше форматируют, так что я велосипед изобрел. :))

if (true              &&
    StochK_0<StochD_1 && 
    StochD_1 > 80     &&  
    && cci_0 < cci_1  &&   
    && cci_0 > 100 
   )

//((Sto_0>Sto_1&&Sto_0< 20)&&(OsMA_0>OsMA_1&&OsMA_0<-P)&&(Macd_0>Macd_1&&Macd_0<-N))
// Ваш вариант вот так будет выглядеть наиболее прозрачно, на мой взгляд
if (true                         &&
    (Sto_0 >Sto_1  && Sto_0 <20) &&
    (OsMA_0>OsMA_1 && OsMA_0<-P) &&
    (Macd_0>Macd_1 && Macd_0<-N)  
   ) 
 
artmedia70:

Почему вот это работает и считает правильно увеличение значения переменной на 10 процентов:

... а вот это не увеличивает:

в чём разница - убейте - не пойму...





0.1 - double, а 100 - int.

Посмотрите в учебнике приведение типов.

 
Svinozavr:

0.1 - double, а 100 - int.

Посмотрите в учебнике приведение типов.

Так у меня ВСЕ переменные там int ... Получается, что ... ай... нафиг ... пошел дальше колупать...

Вот это же работает:

LastTakeProfitS = MathRound(LastTakeProfitS+LastTakeProfitS/100*PercentTakePr);
... а если сюда воткнуть тупо другую переменную того же типа, то уже не работает... С утра оно мне все мозги уже вынесло напрочь...
 
obla4ko:

У меня в прошлом посте выложена часть кода, отвечающая за открытие позиции. Вы не могли бы вот сказанное вами тут вписать в него - как говорится "лучше один раз увидеть,чем...." :)

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

bool work=1;int tick;datetime t;
int start()
{
  if(!work){if(t!=iTime(NULL,0,1)){t=iTime(NULL,0,1);tick++;}}
  if(tick==2){work=1;tick=0;} 
   
   time();
   if(OrdersTotal()==0)CheckForOpen();
  //-- code
}
//----
void CheckForOpen()
{
   double ma;
   int    res;
    
   ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);

   if(work && Open[1]>ma && Close[1]<ma)  
     {
      res=OrderSend(Symbol(),OP_SELL,Lots,Bid,30,Bid+Stoploss*Point,Bid-Takeprofit*Point,"",MAGICMA,0,Red);
      return;
     }

   if(work && Open[1]<ma && Close[1]>ma)  
     {
      res=OrderSend(Symbol(),OP_BUY,Lots,Ask,30,Ask-Stoploss*Point,Ask+Takeprofit*Point,"",MAGICMA,0,Blue);
      return;
     }

}
//----
void time()
{
static datetime time;
    
  if(OrdersHistoryTotal()==0)return;
  for(int i=0;i<OrdersHistoryTotal();i++)
       {
       OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
         if(OrderCloseTime()>time && OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
            {
            time=OrderCloseTime();
            if(OrderProfit()<0)work=0;
            }
       }    
   
}
 
artmedia70:

Так у меня ВСЕ переменные там int ... Получается, что ... ай... нафиг ... пошел дальше колупать...

Вот это же работает:

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


Всё... сам нашел... вместо 100 - тупо 100.0 ... Поубивал бы нафиг ...
Причина обращения: