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

 
Zhunko:
Учитывались марка немецкая, экю, евро. Думал, что это все знают.

Оказывается - не все... :(

Как-то странно... марка - есть марка - она ж не евро... Ну да Бог с ними...Бум учитывать значит сей факт...

 
Notter:

Добрый день всем хорошим людям,

Вопрос по торговле при сильных движениях. В функции OrderSend есть параметр slippage - максимальное проскальзывание от цены заявки. Есть ли ограничения по его значению? Или можно и 1000 пунктов задать? Значение "0" означает нуливое проскальзывание или , что этот параметр не учитывается при открытии заявки?

Кроме этого, при сильном движении, моя заявка по рынку, отправляемая из моего клиетского терминала попадёт на сервер и будет ждать исполнения находящихся на сервере отложенных заявок независимо от их цены, или сразу исполняется по рыночной цене на момент поступления? Другими словами, при пробое, я могу расчитывать на исполнене заявки ещё до конца импульса, или она всё равно откроется лишь на начале коррекции?

Проскальзывание - разница в пунктах от заявленной цены в торговом приказе вашего терминала и от цены возвращаемой сервером. Пока там думают, цена может и уйти. При сильных движениях, сервер обычно в задумчивость впадает. Чем больше он в задумчивости, тем меньше у вас шансов открыться по заявленной цене и, соответственно, по более выгодной для вас. Если вы поставите проскальзывание в 1000 пунктов - вы откроетесь... в конце движения. Это выгодно ДЦ. И чем кухня "кухнее :)", тем дольше сервер "думать" будет, закидывая вас реквотами и пр., пр., др. ...

Поставив значение 0 в кач-ве параметра проскальзывания, вы откроетесь только в том случае, если цена приказа и возвращаемая сервером будут идентичны.

 

С Новым Годом!

Написал код, который по идее должен находить максимум и минимум в указанном временном промежутке внутри дня. Но по факту что-то не выходит. Посмотрите пожалуйста.

//+------------------------------------------------------------------+
//|                                                     +Session.mq4 |
//|                                       Copyright 2012, silhouette |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, silhouette"
#property link      "http://www.metaquotes.net"

#property indicator_chart_window
#include <+ChartTrendLineCreate.mqh>

string OpenTime="00:00"; // время открытия сессии
string CloseTime="09:00"; // время закрытия сессии
int Days=100; // количество расчитываемых дней

//+------------------------------------------------------------------+
string Symb;
int i;
bool Ans;
//+------------------------------------------------------------------+
int init()
  {
   Symb=Symbol();
   return(0);
  }

int deinit()
  {

   return(0);
  }

int start()
  {
   //+------------------------------------------------------------------+
   datetime Time_OD, H1_OS, H1_CS; 
   int H1_OpenDayShift, H1_OpenSessionShift, H1_CloseSessionShift, Hst, Lst;
   string H1_OD;
   double Maximum, Minimum;
   //+------------------------------------------------------------------+
   for(i=0; i<100; i++) // перебираем дни
    {
     Time_OD=iTime(Symb,PERIOD_D1,i); // находим дату открытия выбранного бара
     H1_OpenDayShift=iBarShift(Symb,PERIOD_H1,Time_OD,false); // ...его индекс
     
     H1_OD=TimeToStr(Time_OD,TIME_DATE); 
     
     H1_OS=StrToTime(H1_OD+" "+OpenTime);
     H1_OpenSessionShift=iBarShift(Symb,PERIOD_H1,H1_OS,false); // ...индекс бара открытия сессии
     H1_CS=StrToTime(H1_OD+" "+CloseTime);
     H1_CloseSessionShift=iBarShift(Symb,PERIOD_H1,H1_CS,false); // ...индекс бара закрытия сессии
     
     // ... максимум и минимум
     Hst=iHighest(Symb,PERIOD_H1,MODE_HIGH,(H1_OpenSessionShift-H1_CloseSessionShift),H1_CloseSessionShift);
     Lst=iLowest(Symb,PERIOD_H1,MODE_LOW,(H1_OpenSessionShift-H1_CloseSessionShift),H1_CloseSessionShift);
     Maximum=iHigh(Symb,PERIOD_H1,Hst);
     Minimum=iLow(Symb,PERIOD_H1,Lst);
     
     ChartTrendLineCreate(H1_OS, Maximum, H1_CS, Maximum, Red);
     ChartTrendLineCreate(H1_OS, Minimum, H1_CS, Minimum, Red);
     
     
    }

   return(0);
  }

 

 
silhouette:

С Новым Годом!

Написал код, который по идее должен находить максимум и минимум в указанном временном промежутке внутри дня. Но по факту что-то не выходит. Посмотрите пожалуйста.

Попробуй H1_OpenSessionShift-H1_CloseSessionShift +1
 
Mislaid:
Попробуй H1_OpenSessionShift-H1_CloseSessionShift +1
Спасибо, теперь находит все как нужно. 
 
Скажите, пожалуйста, как сделать, чтобы на ТФ Д1 советник ставил ордера каждые, например, 4 часа? Сейчас я вынужден для этого вручную переходить на мелкие ТФ и если сигналы индикатора совпадают с Д1, то устанавливать ордер. Утомительно и неудобно.
 
sultonov:
Скажите, пожалуйста, как сделать, чтобы на ТФ Д1 советник ставил ордера каждые, например, 4 часа? Сейчас я вынужден для этого вручную переходить на мелкие ТФ и если сигналы индикатора совпадают с Д1, то устанавливать ордер. Утомительно и неудобно.

С Новым Годом, Юсуф!!! 

Для этого необходимо ЯВНО в советнике прописать условия, включая отслеживания времени на установку ордеров, можно контроль нового бара на ТФ Н4 сделать, чтобы он включался в работу.

Что мешает эксперта в Вашем случае повесить на график инструмента на Н4, при этом сигналы на открытие ордеров получать используя Д1, также задав это в ЯВНОМ виде в коде экспа?

П.С. А ВЫ что? Алкоголь уже не употребляете что ли?

2-е января на дворе - бухай, да бухай!!! :-)

 

 Я написал функцию, которая должна находить ТП по фибо:

//+-------------------------------------------------------------------------------------+
//| Вычисление ТП по Фибе                                                               |
//+-------------------------------------------------------------------------------------+
double GetProfitByFibo()
{
  double minValue, maxValue;
  
 // if(GetStateMa() == MA_TALKING_LONG)
    if(OrderType() == OP_BUYSTOP)
    {
      maxValue = iHigh(Symbol(),i_ExtremumLookingTF,i_maxValueShiftB);
      minValue = iLow(Symbol(),i_ExtremumLookingTF,i_minValueShiftB);
     
      if((maxValue - minValue) >= 7*pt)
      {
      double fibo1618 = NormalizeDouble((minValue + (maxValue - minValue)*1.618),Digits);
      }
   
    }
  
 // if(GetStateMa() == MA_TALKING_SHORT)
    if(OrderType() == OP_SELLSTOP)
    {
      maxValue = iHigh(Symbol(),i_ExtremumLookingTF,i_maxValueShiftS);
      minValue = iLow(Symbol(),i_ExtremumLookingTF,i_minValueShiftS);
 
      if((maxValue - minValue) >= 7*pt)
      {
      fibo1618 = NormalizeDouble((maxValue - (maxValue - minValue)*1.618),Digits);
      }
          
  }
  return(fibo1618);
}

  Внешние переменные для этой функции вот:

extern string ___H2 = "_____  Параметры для функции Fibo_TP _____";
extern int i_ExtremumLookingTF = 5,
           i_maxValueShiftB = 8,
           i_minValueShiftB = 3,
           i_maxValueShiftS = 3,
           i_minValueShiftS = 8;

 В рабочий эксперт вставляю данную функцию вмест фиксированного Тейк Профита, и эксперт начинает тупить. Что может быть не так?

 Периодически при модификации ордера, ТП не ставится вообще.. 

 Вот функция для покупок например (предыдущую функцию модификации я закомментировал):

 

//+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
bool OpenBuy()
{
  int ticket = -1;
  string myNote = "Сов баянул";
  
  double price = High[1] + i_thresholdFromInput*pt;
  double SL = Low[1] - i_thresholdFromBasedSL*pt ;

  if(price > Ask)
  {
    ticket = OrderSend(Symbol(),OP_BUYSTOP,0.1,NormalizeDouble(price,Digits),i_slippage,0,0,myNote,i_myMagic,0,Navy);
  }
  
  if(ticket > 0 && OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES) == true)
  //  if(!OrderModify(ticket,OrderOpenPrice(),NormalizeDouble(SL,Digits),NormalizeDouble(High[1] + i_tp*pt,Digits),0,Navy))
//  Print("GetProfitByFibo() = ", GetProfitByFibo());
      if(!OrderModify(ticket,OrderOpenPrice(),NormalizeDouble(SL,Digits),GetProfitByFibo(),0,Navy))
    return(false);
  
  return(true);
}
 
double GetOrderOpenPrice(string sy="NULL", int op=-1, int mn=-1)
  {
  datetime t;
  double   r=0;
  int      i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++)
    {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
      if (OrderSymbol()==sy || sy=="")
        {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL)
          {
          if (op<0 || OrderType()==op)
            {
            if (mn<0 || OrderMagicNumber()==mn)
              {
              if (t<OrderOpenTime())
                {
                t=OrderOpenTime();
                r=OrderOpenPrice();
              }
            }
          }
        }
      }
    }
  }
  return(r);

}


Данная функция проверяет цену открытия последнего ордера.

Как написать в вызывалки этой функции данное условие: Если цена ушла вниз или вверх на 75 пипсов, от цены открытия последнего ордера, то продалжаем работу.

 

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

 

В прикрепленном файле советник от Вольдемара. К сожалению, он не отвечает в личке, а подкорректировать советник хочется побыстрее.

 Как можно изменить условия открытия ордера? Сейчас советник настроен на принцип отката, а необходимо, чтобы открывался в зависимости от последнего бара. Если цена закрытия ниже цены открытия, то открывается селл и наоборот.

 

Спасибо 

Файлы: