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

 
Cmu4:

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

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

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


Можно примерно так, с контролем открытых позиций
Файлы:
 
Vinin:

Можно примерно так, с контролем открытых позиций


Тоже подумал в этом направлении. Но меня интересует сама ошибка. Где она?

п.с. спасибо за добавление в код! При помпилляции ругается на неопределённость order_type, в функции Closeall.

 
Cmu4:


Тоже подумал в этом направлении. Но меня интересует сама ошибка. Где она?

п.с. спасибо за добавление в код! При помпилляции ругается на неопределённость order_type, в функции Closeall.


void Closeall(int OP=-1)
{
   for (int i=OrdersTotal()-1; i>=0; i--) 
   { 
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
      { 
         if(OrderSymbol()==Symbol())
         { 
            if (OrderType()==OP || OP=-1) 
            {
               if(OrderType()==OP_BUY)
                  OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);
               else if(OrderType()==OP_SELL)
                  OrderClose(OrderTicket(),OrderLots(),Ask,3,Green);
            }
         } 
      }
   }
}
 
Cmu4:

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

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

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

Надо знать: открываются подряд позиции как? Бай, Селл, Бай, Селл и т.д. или подряд одни, например, Бай.

Думаю, что у Вас открываются поочередно Бай и Селл.

Причина: сравниваемые МАКД очень близки и меняются местами (бОльший мЕньший) быстро. Поэтому выполняются поочередно сначала одно условие, потом другое.

Решение:

if (MA1-MA2 > 0.0001 && MA2-MA3 > 0.0001 && Napr==1) //или другая константа
 
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? В програмировании полный кран. Логическую цепочку я понимаю, а воплотить в код руки кривые.


Значит проблема не в этом... через if должно все работать... Там так и получается - что пока (тот же Ваш while ) условие (d_mn_1>d_pl_1 && (d_mn_0-d_pl_0)>=2 - выполняется и при этом RSI(NULL,0,rsi_period,PRICE_CLOSE,2)>0.7 && iRSI(NULL,0,rsi_period,PRICE_CLOSE,0<0.7), то открываем только сел...

Здесь и bool - никакой не нужен - зачем Вам связываться с флагами здесь, когда и так все ясно, что пока все эти условия выполняются, то открываем или бай или сел ордера.

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 не работает" - расшифруйте подробнее - что пишет в "журнале"?

 
ikatsko:

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

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

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

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

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

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

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

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

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

Примерно так

int level=AccountStopoutLevel(); ///// ТОЛЬКО ЕСЛИ ВЫРАЖЕН В ПРОЦЕНТАХ!!!
if (AccountStopoutMode==0)
  {
   double Marga = NormalizeDouble(MarketInfo("EURUSD", MODE_MARGINREQUIRED), 2);
   double TickValue = NormalizeDouble(MarketInfo("EURUSD", MODE_TICKVALUE), 2);
   int SL = 26;////Пунктов
   double lotsShortNaVSE = NormalizeDouble(AccountBalance() / (level * Marga / 100.0 + SL * TickValue ), 2);
  }

Количество лотов не должно быть больше lotsShortNaVSE

SL ---- это возможный убыток по вашей открываемой позиции.

Причем у ДЦ есть тоже свой взгляд на возможный убыток.

Поэтому нужно брать Максимальное число от вашего или от ДЦ. Например на данный момент у ДЦ для пары EURUSD возможный убыток SL = 26.

SL = MathMax(VashSLvPunktah, SLvPunktahUVashegoDillinga);
Может есть еще какие нибудь варианты?
 
rlx:


Причем у ДЦ есть тоже свой взгляд на возможный убыток.

Поэтому нужно брать Максимальное число от вашего или от ДЦ. Например на данный момент у ДЦ для пары EURUSD возможный убыток SL = 26.

Может есть еще какие нибудь варианты?


Вот только как вычислять этот взгляд ДЦ.

Но это скорее критично для краткосрочников.

 

Т.е. к примеру если у вас заложен стопЛосс 5 пунтков. то ест-нно количество открываемых лотов расчитается много.

Но открыть такую позицию не получится, т.к. у ДЦ есть своя системя РискМенеджмента.

 
rlx:


Вот только как вычислять этот взгляд ДЦ.

Но это скорее критично для краткосрочников.


Доброго дня! Помогите пожалуста. Нужен скрипт, который при ручной торговле автоматически устанавливает заданные стоп и профит. Возможно ли это,такой и если существует дайте ссылку.
 
Cmu4:

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

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

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

Пока выполняется условие по МАКДаку, будут пачками открываться и ордера на каждом тике.

Добавьте в условия
для позиций Бай: Если НЕТ рыночного ордера Бай, то открыть его...
для позиций Селл: Если НЕТ рыночного ордера Селл, то открыть его...

И проблема будет решена.

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