[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 148

 
Konstebl:

Подскажите пожалуйста почему советник не открывает сделки.Пишет ОШИБКА 130.Стоплосс = 55 пунктов(4 знака котировки)

  


Немного модернизировал Ваш советник. Вставил защиту от неправильной цены открытия.

 extern int PeriodLWMA=14;
 extern int tp=55;
 extern int sl=55;
 extern double MaxRisk=10;
 extern double Lot=0.1;
 bool NewBar()
  {
       static datetime lastbar = 0;
       datetime curbar = iTime(Symbol(), 0, 0);
       if(lastbar!=curbar)
       {
             lastbar=curbar;
             return (true);
       }
       return(false);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
    int ticket;
    double price,takeprofit,stoploss,Lots;
//----
    double frUP = iFractals(NULL,0,MODE_UPPER,3);
    double frLOW = iFractals(NULL,0,MODE_LOWER,3);
    double lwma = iMA(NULL,0,PeriodLWMA,0,MODE_LWMA,PRICE_CLOSE,0);
    frUP = iFractals(NULL,0,MODE_UPPER,3);
    frLOW = iFractals(NULL,0,MODE_LOWER,3);
       double MaxLot = MarketInfo(Symbol(),MODE_MAXLOT);
       double MinLot = MarketInfo(Symbol(),MODE_MINLOT);
       Lots = NormalizeDouble(AccountFreeMargin()/10*MaxRisk/1000,2);
    if(Lots>MaxLot)
       Lots = MaxLot;
    else Lots=Lot;
    if(Lots<MinLot)
       Lots = Lot;
//----
    static bool flag = true;
    if(NewBar())
      flag = true;
      if(Ask>lwma && frUP>Ask && frUP != EMPTY_VALUE && flag)
         {
         price = NormalizeDouble(frUP+(Ask-Bid)+30*Point,Digits);
         takeprofit = NormalizeDouble(price+tp*Point,Digits); 
         stoploss = NormalizeDouble(price-sl*Point,Digits);
         ticket = OrderSend(Symbol(),OP_BUYSTOP,Lots,price,5,stoploss,takeprofit,"Fractal",123,0,Blue);
         if(ticket>0 && GetLastError()==0)
            flag = false;
// Печатаем ошибку только в том случае, если она действительно случилась
         else Print("Ошибка № ",GetLastError()," OP_BUYSTOP Ask=",DoubleToStr(Ask,8)," Bid=",DoubleToStr(Bid,8)," OpenPrice=",DoubleToStr(price,8)," sl=",DoubleToStr(stoploss,8)," tp=",DoubleToStr(takeprofit,8));
            return(ticket);
         }
//-------------------------------------------------------------------
    if(NewBar())
      flag = true;
      if(Bid<lwma && frLOW<Bid && frLOW>0 && frLOW!=EMPTY_VALUE && flag)
         {
         price = NormalizeDouble(frLOW-30*Point,Digits);
         takeprofit = NormalizeDouble(price-tp*Point,Digits);
         stoploss = NormalizeDouble(price+sl*Point,Digits);
         ticket = OrderSend(Symbol(),OP_SELLSTOP,Lots,price,5,stoploss,takeprofit,"Fractal",123,0,Red);
         if(ticket>0 && GetLastError()==0)
            flag = false;
// Печатаем ошибку только в том случае, если она действительно случилась
          else Print("Ошибка № ",GetLastError()," OP_SELLSTOP Ask=",DoubleToStr(Ask,8)," Bid=",DoubleToStr(Bid,8)," OpenPrice=",DoubleToStr(price,8)," sl=",DoubleToStr(stoploss,8)," tp=",DoubleToStr(takeprofit,8));
            return(ticket);
         }
  }
 
Vinin:

А этот вариант не подходит. Не самый лучший конечно


Посомтрел, но к сожалению не то. Мне бы хотелось раскрасить именно свечу, как она есть.
 
Благодарю!
 
Vinin:

Работать будет, но результат будет другой. Не тот что Вы ждете

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


Заранее спасибо!

 
arabon:

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


Заранее спасибо!


double CalculateProfit_last() {//прибыль от последенй сделки
   double Profit = 0;
   int cnt;
   if(OrdersTotal()!=0)
   {
     cnt = OrdersTotal() - 1;
        OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
        if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
           if (OrderType() == OP_BUY || OrderType() == OP_SELL) Profit = OrderProfit();
   }
   Profit=0.0;  // Зачем вести расчеты, если потом их обнулить
   Print(Profit);
   return (Profit);
}
И речь о каком ордере идет?  О последнем открытом или последнем закрытом. Если он единственный, то вопрос исчезает
 
Vinin:

И речь о каком ордере идет?  О последнем открытом или последнем закрытом. Если он единственный, то вопрос исчезает

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


P.S. даже и не знаю зачем я это ляпнул =)

   }
   Profit=0.0;  // Зачем вести расчеты, если потом их обнулить
   Print(Profit);
   return (Profit);
}
 


Здравствуйте. Данный код тестовый. Первый вопрос как сделать что бы появилась нумерация строк?

И более по теме: в приведенным коде  "ca[1]=Low[100]; Переобозначение    происходит только в этом варианте" переназначение данных в массиве происходит только в внутри цикла. Возможно если массив назначили для отображения данных графика,  то вносить данные в него можно только один раз? 

 

int start(){
int i=0 ;int k=0 ;
 while(i<=5000) 
   { 
  k=0 ;
  ca[i]=0;
 volume[i]=0;
 while(k<=10)
 {ca[i]= ca[i]+Volume[i+k]*(High[i+k]+Low[i+k])/2;
  volume[i]=volume[i]+Volume[i+k];
   k=k+1; } ca[i]=ca[i]/volume[i];
    i=i+1;//ca[1]=Low[100]; Переобозначение происходит только в этом варианте  
  }
  ca[1]=Low[100];//Переобозначение не происходит программа не видит  
  int a1=1;
  while(a1==1)//Переобозначение не происходит программа не видит
  {ca[1]=Low[100];
  a1=a1+1;}
  return(0);
  }
 
Так работает. видимо я сам ответил на свой вопрос. 
int start(){
int i=0 ;int k=0 ;
 while(i<=500) 
   { 
  k=0 ;
  ca1[i]=0;
 volume[i]=0;
 while(k<=10)
 {ca1[i]= ca1[i]+Volume[i+k]*(High[i+k]+Low[i+k])/2;
  volume[i]=volume[i]+Volume[i+k];
   k=k+1; } ca1[i]=ca1[i]/volume[i];
    i=i+1;
  }
 ca1[0]=Low[100];//Переобозначение  происходит программа  Видит
  //Цикл заполнения массива для отображения значений функции 
   i=0;
    while(i<=500)//Переобозначение происходит программа  Видит
     {ca[i]=ca1[i];
      i=i+1;}
  return(0);
  }
 
T-G:
Подскажите как Средства (AccountEquity() ) и Залог (AccountMargin() ) отдельно для позиций Бай и Селл?

Посмотрите, может такие ф-и найдутся в  пользовательских фукциях И.Кима: https://www.mql5.com/ru/forum/131859

С 

 
К сожалени.
leonid553:

Посмотрите, может такие ф-и найдутся в  пользовательских фукциях И.Кима: https://www.mql5.com/ru/forum/131859

С 


к сожалению на нашел