Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 710

 
sponger:
Можно так: Km=MathMax(i/r,Point); // с делением, и не будет нуля!
 
borilunad:
Можно так: Km=MathMax(i/r,Point); // с делением, и не будет нуля!

ух тыыыы!!! Голова! Спасибо Большое Вам!!! После исключительно нудной четырех-часовой работы я все таки нашел как приткнуть эту функцию так чтобы тестер не ругался) вышло примерно следующее.

   double a=iLowest(Symbol(),PERIOD_M1,MODE_LOW,m1,0);                        //возвращаем индекс бара за n-периодов с min ценой

   double b=iHighest(Symbol(),PERIOD_M1,MODE_HIGH,m1,0);                      //возвращаем индекс бара за n-периодов с max ценой

   double MinLOWPeriod=iLow(Symbol(),PERIOD_M1,a);                            //возвращаем значение цены бара с наименьшей ценой

   double MaxHIGHPeriod=iHigh(Symbol(),PERIOD_M1,b);                          //возвращаем значение цены бара с наибольшей ценой

   double PriceCloseBar=iClose(Symbol(),PERIOD_M1,0);                         //возвращаем значение цены закрытия последнего бара 

   double xm1=(PriceCloseBar-MinLOWPeriod)/(MathMax((MaxHIGHPeriod-MinLOWPeriod)/100,Point));

   Print(xm1); 

а еще сделал формулу пологичнее;)

Спасибо! 

 
Жалко, кнопочки "Спасибо" нету(
 

sponger:

Жалко, кнопочки "Спасибо" нету(

Зато есть другая волшебная кнопа: SRC, при использовании которой код (или его фрагменты) приобретают более ухоженный и читаемый вид в посте задавшего вопрос, добавляя плюс к карме автора вопроса и повышая количество тех, кто посмотрит на этот код и решит по нему помочь.

Только тс-с-с... . Так-то в тайные знания о волшебстве кнопы SRC посвящены, в основном, только чтящие священные тексты мануалы на сайте. Например, такие как эти.

И успеха вам здесь в освоении тайных знаний при решении дальнейших вопросов!
 
sponger:

ух тыыыы!!! Голова! Спасибо Большое Вам!!! После исключительно нудной четырех-часовой работы я все таки нашел как приткнуть эту функцию так чтобы тестер не ругался) вышло примерно следующее.

   double xm1=(PriceCloseBar-MinLOWPeriod)/(MathMax((MaxHIGHPeriod-MinLOWPeriod)/100,Point));

   Print(xm1); 

а еще сделал формулу пологичнее;)

Спасибо! 

Не за что! И согласен с DiPach на все 100%%! Успехов!
 
void ChagingLots(int Magic,double percent,double lot)
{ 
  double t=2,             //коэффициент при делении,для того чтобы узнать цену закрытия
         PriceCl,         //цена закрытия части ордера
         takeprofit;      //нужна для вычислений
  int count = 0,order;
  for(int i=OrdersTotal()-1;i>=0;i--)    //пробегаемся по массиву ордеров
     {
        if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
          {
            if(OrderSymbol()==Symbol() && OrderMagicNumber() == Magic)
              {
                 if(OrderType()== OP_BUY)        //если ордер на покупку
                 {
                 takeprofit = OrderTakeProfit();   //вычисляем тейк ордера
                 PriceCl    = NormalizeDouble((takeprofit + OrderOpenPrice())/t,Digits);  //примерную цену закрытия
                 order = OrderTicket();    //получили ордер
                 if(Bid>PriceCl) //если текущая цена оказалась выше нашей цены ,то закрываем часть ордера
                 {OrderClose(order,NormalizeDouble(lot*percent/100,2),PriceCl,3);} 
                 }
                 if( OrderType()== OP_SELL )// для продажи аналогично
                 {
                   takeprofit = OrderTakeProfit();
                   PriceCl    = NormalizeDouble((takeprofit + OrderOpenPrice())/t,Digits);
                   order = OrderTicket();
                   if(Bid<PriceCl)
                   {OrderClose(order,NormalizeDouble(lot*percent/100,2),Bid,3);}
                 }
              }
          }
     }
     
}

Всем привет) 

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

Тут советник в котором эта функция должна работать)

Файлы:
zigzagx.mq4  16 kb
 
LBatters:

Всем привет) 

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

Тут советник в котором эта функция должна работать)

Вы посмотрели в Доке, что значит эта ошибка?! Отсюда найдёте ответ!

По какой цене закрывается Бай? И Селл?

 

Приветствую всех
мой вопрос относиться скорее к разработчикам из метаквотес, но всё же...


Сколько баров храниться история? Т.е. с каким максимальным по сдвигу баром можно работать?

 Код:

Print(iMA(Symbol(),0,14,0,MODE_SMA,PRICE_CLOSE,1200));

Print(iClose(Symbol(),0,1200));

 При тесте такого сдвига, терминал выдаёт для 2х случаев 0.0

 ,Но

Print(iMA(Symbol(),0,14,0,MODE_SMA,PRICE_CLOSE,120));

Print(iClose(Symbol(),0,120)); 

При тесте всё работает 

Возможно ли как-то регулировать объём доступной истории? Может кто-то сталкивался с такой проблемой и решение уже найдено?
Заранее спасибо!

 

Всем здравствуйте.

Пытаюсь дополнить простой советник-трал Кима, что бы после закрытия всех рыночных ордеров он удалял отложенные ордера, не выходит(

вставил функцию удаления ордеров:

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 28.11.2006                                                     |
//|  Описание : Удаление ордеров                                               |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любой ордер)                    |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
void DeleteOrders(string sy="", int op=-1, int mn=-1) {
  bool fd;
  int  err, i, it, k=OrdersTotal(), ot;

  if (sy=="0") sy=Symbol();
  for (i=k-1; i>=0; i--) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot>1 && ot<6) {
        if ((OrderSymbol()==sy || sy=="") && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) {
            for (it=1; it<=NumberOfTry; it++) {
              if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
              while (!IsTradeAllowed()) Sleep(5000);
              fd=OrderDelete(OrderTicket(), clDelete);
              if (fd) {
                if (UseSound) PlaySound(SoundSuccess); break;
              } else {
                err=GetLastError();
                if (UseSound) PlaySound(SoundError);
                Print("Error(",err,") delete order ",GetNameOP(ot),": ",ErrorDescription(err),", try ",it);
                Sleep(1000*5);
              }
            }
          }
        }
      }
    }
  }
}

 Дальше столкнулся с проблемой которую мне вряд ли осилить, в кодах не силен.

полагаю нужно написать условие типа:

это просто пример из другого советника 

   if(AccountProfit()<-TargetLoss || AccountProfit()>TargetProfit) 
     {
      ClosePosFirstProfit();
      if(DeleteOrders) DeleteOrders();
     }


 Помогите пожалуйста.

Файлы:
tral.mq4  19 kb
 
Господа знатоки MQL-4, как кодом MQ4 выгрузить и снова загрузить индюк?