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

 
costy_ >>:

Должно переходить на бай когда открытие выше ма1.

Я так понимаю что "барабашка" в ||, т.к. не знаю как обозначить например "если" (ma1>ma2&&ma1>Open[1] "или" ma1>ma3&&ma1>Open[1]) "тогда" Oпен БАЙ();


По графику видно что не все условия выполняются!!!


Пробовал через еlse на одной свече 53 покупки.


Каким иным способом можно реализовать логику?


Ошибок в вашем куске кода просто огромное количество.

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

Единственное пока поправлю:

if ((ma1>ma2 && ma1>ma3 && Open[1]>ma1) || 
    (ma2>ma1 && ma2>ma3 && Open[1]>ma1) ||
    (ma3>ma1 && ma3>ma2 && Open[1]>ma1)
  )
  OpenBuy();
потом может ещё что подскажу, когда время появится....



 
Спасибо разобрался
if ((ma1>ma2 && ma1>ma3  && Open[1]>ma1) || 
    (ma2>ma1 && ma2>ma3  && Open[1]>ma1) ||
    (ma3>ma1 && ma3>ma2  && Open[1]>ma1)
   )
    OpenBuy();

а надо

if (ma1>ma2 && ma1>ma3 && Open[1]>ma1)
OpenBuy();
if (ma2>ma1 && ma2>ma3 && Open[1]>ma1)
OpenBuy();
if (ma3>ma1 && ma3>ma2 && Open[1]>ma1)
OpenBuy();
 
costy_ >>:

а надо

Одно и тоже, только первый вариант кароче.

 
MrSoros >>:

Одно и тоже, только первый вариант кароче.

К сожалению первый вариант работал неправильно на графике видно (странно это все).

Первый конечно красивее и логика вроде та, это типа сначало сложение потом умножение. =))

 
MrSoros >>:

Со знаками все верно.

Сама по себе идея (закрытие по CCI), с моей точки зрения - не ахти....

Я уже проходил это...

Но это уже вопрос стратегии.

Склько трейдеров, столько и стратегий...


Нет, не так работает алгоритм, сейчас он закрывает по ССИ если профит больше 10пп, а мне нужен именно уровень профита 10пп только там что бы закрывал по клозе, если профит больше 10пп то не должен закрываться по ССИ. Сейчас он закрывает по ССИ если цена профита больше 10пп(

Сам смысл алгоритма в этой функции заключается в другом, есть уровень профита 10пп - то есть виртуальный профит фиксируемый по клозе по условию направления индикатора ССИ. Когда цена идет в профит она всегда проходит этот уровень так как ССИ смотрит правильно, потом пройдя этот уровень цена иногда дает обратный ход возврат цены в исходное состояние, или изменении тенденции направления движения, - в этом случае ССИ всегда смотрит в другую сторону, и при проходе в обратную сторону на уровне 10пп фиксируется ордер так как ССИ будет смотреть уже в противоположную сторону.

  if (OrderType() == OP_BUY && cci_0<cci_1 && Bid-OrderOpenPrice() >= Point*profit) OrderClose(OrderTicket(), OrderLots(), Bid, slip, Blue);
  if (OrderType() == OP_SELL && cci_0>cci_1 && OrderOpenPrice() - Ask >= Point*profit) OrderClose(OrderTicket(), OrderLots(), Ask, slip, Red);

  

  cci_0<cci_1 && Bid-OrderOpenPrice() == Point*profit // может вот так? - так вообще не работает(
 

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

Посмотрите, правильно-ли расчитывается размер лота в процентах от баланса:

//расчёт размера лота
double Lots()
   {
   double ls=MarketInfo(Symbol(),MODE_MINLOT)+MarketInfo(Symbol(),MODE_LOTSTEP)*MathFloor((procentdepo*AccountBalance()/100000-MarketInfo(Symbol(),MODE_MINLOT))/MarketInfo(Symbol(),MODE_LOTSTEP));
     if(ls>MarketInfo(Symbol(),MODE_MAXLOT))   { ls=MarketInfo(Symbol(),MODE_MAXLOT); }
     if(ls<MarketInfo(Symbol(),MODE_MINLOT))   { ls=MarketInfo(Symbol(),MODE_MINLOT); }
   return(ls);
   }

где procentdepo - % от депозита

 
Piboli >>:

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

Посмотрите, правильно-ли расчитывается размер лота в процентах от баланса:

где procentdepo - % от депозита

Вот так сделайте.

extern double PercentLots  = 0.5;// внешние переменные


//то что ниже закиньте в конец кода
double GetLots() 
{
double minlot = MarketInfo(Symbol(), MODE_MINLOT);
double maxlot = MarketInfo(Symbol(), MODE_MAXLOT);

if(PercentLots!=0)
 {
   double lot = NormalizeDouble(AccountBalance() * PercentLots  /1000.0 / 100.0, 2);
   if(lot < minlot) lot = minlot;
   if(lot > maxlot) lot = maxlot;
  }
  else lot=Lots; 
  return(lot);
  }  

//GetLots() - вставьте в ticket=OrderSend(Symbol(),OP_BUY,GetLots(),Ask,3,stop,Ask+Takeprofit*Point,"",MagicNumber,0,Green);
 
Piboli >>:

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

Посмотрите, правильно-ли расчитывается размер лота в процентах от баланса:

где procentdepo - % от депозита

а лучше примините вот эту функцию оптимизации лота, здесь работает ММ если будут убыточные сделки, то лот будет уменьшаться до начального.

//внешние переменные
extern double Lots = 0.1;          //стартовый лот до баланса 500
extern double MaximumRisk = 0.1;   //увеличение лота на каждые 500 баланса
extern double DecreaseFactor = 3.0;//уменьшение лота при серии убыточных позиций


//то что ниже  закиньте перед стартом
double LotsOptimized() {
       double lot = Lots;
       int orders = OrdersHistoryTotal();
       int losses = 0;
       lot = NormalizeDouble(AccountFreeMargin() * MaximumRisk / 500.0, 2);
       if (DecreaseFactor > 0.0) {
for (int i = orders - 1; i >= 0; i--) {
       if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) == FALSE) {
       Print("Error in history!");
       break;
       }
if (OrderSymbol() != Symbol() || OrderType() > OP_SELL) continue;
if (OrderProfit() > 0.0) break;
if (OrderProfit() < 0.0) losses++;
}
if (losses > 1) lot = NormalizeDouble(lot - lot * losses / DecreaseFactor, 2);
}
if (lot < 0.1) lot = 0.1;
if (lot > 1000.0) lot = 1000;
return (lot);}

int start(){//старт

LotsOptimized() -- вставьте в ticket=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,stop,Ask+Takeprofit*Point,"",MagicNumber,0,Green);
 
Только в двух предыдущих постах не учитывается шаг изменения лота. К сожалению.
 
Vinin >>:
Только в двух предыдущих постах не учитывается шаг изменения лота. К сожалению.

Можно сделать, если я правильно понял шаг - это на какую смму баланса будет прибавлятся лот?

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

extern double balans = 500; //шаг баланса

lot = NormalizeDouble(AccountFreeMargin() * MaximumRisk / balans, 1);
Причина обращения: