[Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2. - страница 465

 
extralifes:

Помогите разобраться с кодом. Как описать правильно условие я не знаю.

Вот кусок советника.

if(total<1)

{

while (d_mn_1>d_pl_1 && (d_mn_0-d_pl_0)>=2) //Пока это условие выполняется открывать только селл при таком условии (iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)>0.7)&&(iRSI(NULL,0,rsi_period,PRICE_CLOSE,0)<0.7)) -какой оператор использовать и как его оформить?
{
OrderSend(Symbol(), OP_SELL, lots, NormalizeDouble(Bid, Digits), 3, /*Ask+10*Point*/0, /*Bid-10*Point*/0, "ADX sell", magic, 0, CLR_NONE);
}

while (d_pl_1>d_mn_1 && (d_pl_0-d_mn_0)>=2) // Пока это условие выполняется открывать только Бай при таком условии (iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)<0.3)&&(iRSI(NULL,0,rsi_period,PRICE_CLOSE,0)>0.3)) - какой оператор использовать и как его оформить?
{
OrderSend(Symbol(), OP_BUY, lots, NormalizeDouble(Ask, Digits), 3, /*Bid-10*Point*/0, /*Ask+10*Point*/0, "ADX buy", magic, 0, CLR_NONE);

}
}
}
}
Огород какой то....
 
butthead:

Понимаю что психологический фактор мне мешает...жадность.. страх даже 300 р потерять.. Что делать?... забыть что реал счет?..


Что если поменять орентировку??? Не "стремиться выграть", а "стремиться не проиграть".
 

Помогите разобраться!

Суть идеи: пока iMACD возрастает - держим BUY, как только начинает падение - закрываем BUY и открываем SELL. Сравнение идёт по трём последним значениям, за исключением текущего.

Проблема кода: открывает множество ордеров при значениях iMACD +-0, как я понял. Normalizedouble() не помогает.

Вот код:

int start()
  {

double MA1=iMACD(NULL,0,5,34,1,PRICE_CLOSE, MODE_MAIN,1), 
       MA2=iMACD(NULL,0,5,34,1,PRICE_CLOSE, MODE_MAIN,2),
       MA3=iMACD(NULL,0,5,34,1,PRICE_CLOSE, MODE_MAIN,3);
       
       
       
if (MA1>MA2>MA3 && Napr==1)
    {Closeall();
    Napr=0;
    OrderSend (Symbol(), OP_BUY, Lot, Ask, 5, 0,0);}

if (MA1<MA2<MA3 && Napr==0)
    {Closeall();
    Napr=1;
    OrderSend (Symbol(), OP_SELL, Lot, Bid, 5, 0,0);}



   return(0);
  }
 
extralifes:

Помогите разобраться с кодом. Как описать правильно условие я не знаю.

Вот кусок советника.


total=OrdersTotal();

if(total<1)

{

while (d_mn_1>d_pl_1 && (d_mn_0-d_pl_0)>=2) //Пока это условие выполняется открывать только селл при таком условии (iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)>0.7)&&(iRSI(NULL,0,rsi_period,PRICE_CLOSE,0)<0.7)) -какой оператор использовать и как его оформить?
{
OrderSend(Symbol(), OP_SELL, lots, NormalizeDouble(Bid, Digits), 3, /*Ask+10*Point*/0, /*Bid-10*Point*/0, "ADX sell", magic, 0, CLR_NONE);
}

while (d_pl_1>d_mn_1 && (d_pl_0-d_mn_0)>=2) // Пока это условие выполняется открывать только Бай при таком условии (iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)<0.3)&&(iRSI(NULL,0,rsi_period,PRICE_CLOSE,0)>0.3)) - какой оператор использовать и как его оформить?
{
OrderSend(Symbol(), OP_BUY, lots, NormalizeDouble(Ask, Digits), 3, /*Bid-10*Point*/0, /*Ask+10*Point*/0, "ADX buy", magic, 0, CLR_NONE);

}
}
}
}
Подскажите как это правильно оформить?


Так не идет что ли?

total=OrdersTotal();
if(total<1)

{

  if (d_mn_1>d_pl_1 && (d_mn_0-d_pl_0)>=2 && iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)>0.7 &&  iRSI(NULL,0,rsi_period,PRICE_CLOSE,0<0.7)
        OrderSend(Symbol(), OP_SELL, lots, NormalizeDouble(Bid, Digits), 3, /*Ask+10*Point*/0, /*Bid-10*Point*/0, "ADX sell", magic, 0, CLR_NONE);
   

  if (d_pl_1>d_mn_1 && (d_pl_0-d_mn_0)>=2 && iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)<0.3 && iRSI(NULL,0,rsi_period,PRICE_CLOSE,0) > 0.3) 
       OrderSend(Symbol(), OP_BUY, lots, NormalizeDouble(Ask, Digits), 3, /*Bid-10*Point*/0, /*Ask+10*Point*/0, "ADX buy", magic, 0, CLR_NONE);

  }
 

нет через if не работает.

Нужно так, пока условие (d_mn_1>d_pl_1 && (d_mn_0-d_pl_0)>=2 правильное, открывать только оредра на селл при условии что iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)>0.7 && iRSI(NULL,0,rsi_period,PRICE_CLOSE,0<0.7)

Аналогично наоборот.

А можно это как то оформить через while или bool? В програмировании полный кран. Логическую цепочку я понимаю, а воплотить в код руки кривые.

 
extralifes:

нет через if не работает.

Нужно так, пока условие (d_mn_1>d_pl_1 && (d_mn_0-d_pl_0)>=2 правильное, открывать только оредра на селл при условии что iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)>0.7 && iRSI(NULL,0,rsi_period,PRICE_CLOSE,0<0.7)

Аналогично наоборот.

А можно это как то оформить через while или bool? В програмировании полный кран. Логическую цепочку я понимаю, а воплотить в код руки кривые.

открывать пока деньги не кончатся? или открывать 1 раз в бар? или 1 раз в тик?
 

Здравствуйте! Не хочется (а бывает) попадать на StopOut. Решил ограничить лот значением, которое бы на "захватывало" StopOut в самых худших условиях. Методом проб и ошибок иду долго. Может у кого решение есть?

Исходные данные:

- валютная пара - не обязательно EURUSD

- прайс (цена покупки/продажи)

- заданный StopLoss в пунктах (предполагается, что худшие условия -не поймать StopOut даже при достижении уровня StopLoss)

- заданное значение лота

- остальные значения вытаскивать функциями МТ4: размер 1 лота, плечо, кросс курс

Желательно бы код.

В теории я понимаю надо: баланс минус возможный убыток на уровне СтопЛосс разделить на залог. И эта величина должна быть больше, чем StopOut (в процентах)

 
Cmu4:

Помогите разобраться!

Суть идеи: пока iMACD возрастает - держим BUY, как только начинает падение - закрываем BUY и открываем SELL. Сравнение идёт по трём последним значениям, за исключением текущего.

Проблема кода: открывает множество ордеров при значениях iMACD +-0, как я понял. Normalizedouble() не помогает.

Вот код:


int start()
  {

double MA1=iMACD(NULL,0,5,34,1,PRICE_CLOSE, MODE_MAIN,1), 
       MA2=iMACD(NULL,0,5,34,1,PRICE_CLOSE, MODE_MAIN,2),
       MA3=iMACD(NULL,0,5,34,1,PRICE_CLOSE, MODE_MAIN,3);
       
       
       
if (MA1>MA2 && MA2>MA3 && Napr==1)
    {Closeall();
    Napr=0;
    OrderSend (Symbol(), OP_BUY, Lot, Ask, 5, 0,0);}

if (MA1<MA2 && MA2<MA3 && Napr==0)
    {Closeall();
    Napr=1;
    OrderSend (Symbol(), OP_SELL, Lot, Bid, 5, 0,0);}



   return(0);
  }
Может проблема в этом была
 
ilunga:
открывать пока деньги не кончатся? или открывать 1 раз в бар? или 1 раз в тик?

Уловие проверяется каждый новый бар. В данном случаи тайм фрейм часовка. Это условие проверяется в начале каждого часа.
 
Vinin:

Может проблема в этом была

Нет.. Сделал, как вы предложили - то же осталось.

Так же, я менял код, разделяя отдельно на блоки открытия и закрытия по условиям. Всё одно. Не знаю, что и делать уже.

Вот скрин из тестера, советник для тестера в прицепе:

Файлы:
Причина обращения: