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

 
dimon74:
Может будет полезно!! Возьми попробуй отталкиваться от одной цены: скажем Bid. Цена открытия для OP_SELLSTOP будет Bid, а для OP_BUYSTOP - Bid+87*Point (или сколько тебе нужно).
Идея понятна, Спасибо!
 
Vinin:

Теперь один магик, в параметрах задается

Посмотрите личку...
 

Помогите пожалуйста. Может кто знает, как реализовать в коде функцию, которая сравнивает предпоследнее значение из истории с последним (мы говорим о закрытых позициях) не важно значение какой величины (например OrderCloseTime()), и если они разные (в данном случае предпоследнее меньше чем последнее) - произвести БЛА-БЛА-БЛА. По возможности доработайте мой код, или напишите свой, если не в ту сторону залез.

double C_T_L_C_P() {

datetime t;

double r=0;

int i, k=OrdersHistoryTotal(), q=0;

if (q==0)

for (i=0; i<k; i++) {

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==true) {

if (OrderType()==OP_BUY || OrderType()==OP_SELL) {

if (t<OrderCloseTime()) {r=OrderCloseTime();}

}}}

return (r);}

СПАСИБО ЗАРАНЕЕ!!!

 

Помогите с проверкой.

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

Правильно ли я думаю ?

if(sign0==1) //проверка начинаертя только после появления 1 
     {
      t=TimeCurrent();                                     //фиксируем время
                                                           //в цикле от t до t+t1 через каждые дельта секунд
       while(t<t+t1)                                       //t1 отрезок времени в перед за которое будем проверять if(sign0==1)
         {
            if(sign0==1)                                   //еще паз проверка наличия  1
              sign1=1;                                    //новой переменой присваиваем 1
            else
              {sign1=0;break;}                             // если нет присваиваем 0 и заканчиваем цикл
            t=t+delta;                                     //проверяем через каждые дельта секунд
         }
      if(sign1==1) op="BUY";
            return;
     }
 
gince:

Помогите с проверкой.

После появления первой единицы надо в цикле проверить, выдержится ли эта единица в течении t+t1 времени (проверка через каждые delta секунд). Если выдержится, то покупаем, а если в какой то момент ее нет то выходим с цикла.

Правильно ли я думаю ?


Результат - бесконечный цикл while (t всегда <t+t1, только если t1=0). В цикле sign1 всегда =1
 
abolk:

Результат - бесконечный цикл while (t всегда <t+t1, только если t1=0). В цикле sign1 всегда =1

Как исправить ошибку ?
 
gince:

Как исправить ошибку ?

Чтобы исправить ошибку, надо подробно изложить алгоритм (не код, а алгоритм). А потом на алгоритм наложить код
 
abolk:

Чтобы исправить ошибку, надо подробно изложить алгоритм

Приходит дискретный сигнал 0 или 1. Если пришла единица, тогда с данново момента  начинаем проверку выдержится ли она допустим 10 мин (600 сек) проверяя через каждые 60 сек. Если все 10 мин была единица - Покупка, а если хотя раз небыла единицы тогда заканчиваем проверку и считаем что нет на открытие ни кокого сигнала.
 
gince:

Приходит дискретный сигнал 0 или 1. Если пришла единица, тогда с данново момента начинаем проверку выдержится ли она допустим 10 мин (600 сек) проверяя через каждые 60 сек. Если все 10 мин была единица - Покупка, а если хотя раз небыла единицы тогда заканчиваем проверку и считаем что нет на открытие ни кокого сигнала.

В коде не понятно, как дискретный сигнал sign0 изменяется. В представленном коде - сигнал не меняется. Есть неудачная попытка работать с изменённым t
 
void CheckForOpen()
  {
   
   int    res;
   datetime t;
   int sign=0;
//---- go trading only for first tiks of new bar


  
  double tr0=iCustom(NULL,0,"trd",0,0);
  double tr1=iCustom(NULL,0,"trd",1,0); 
//---- sell conditions
   if(tr1==1)  
     {
      t=TimeCurrent();
       while(t<t+tim)
         {
            if(tr1==1)
              sign=-1;
            else
              {sign=0;break;}
            t=t+delta;
         }
      if(sign==-1) 
      res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MAGICMA,0,Red);
      return;
     }
Это взято с  Moving Average.mq4
Причина обращения: