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

 
silhouette:

Немного подвис над реализацией алгоритма выставления ордера. 

Суть в том, что есть тикет, я включаю перебор с условие на поиск тикета:

Если какой либо из ордеров соответствует мэджику, то мы его модифицируем. 

Есть другая задача: если ни один из ордеров не соответствует мэджику, то необходимо выставить новый отложенный ордер. if(OrderMagicNumber()!=magic) здесь, получается, не прокатит. 

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

Все очень просто. Заведите некую булеву переменную. Перед обработкой ордеров ставите ее в false.  Как только обработали ордер, меняете на true. После того, как проверите все ордера, проверяете значение переменной - если она осталась false, значит не было ни одного ордера с нужным magic. Открываете новый ордер.

 
midorum:

Все очень просто. Заведите некую булеву переменную. Перед обработкой ордеров ставите ее в false.  Как только обработали ордер, меняете на true. После того, как проверите все ордера, проверяете значение переменной - если она осталась false, значит не было ни одного ордера с нужным magic. Открываете новый ордер.

 

 

 

 

спасибо!
 
Roman.:
Попробуйте обыграть  (отредактировать под свои нужды) ф-ии Ким И.В isCloseLastPosByStop - Возвращает флаг закрытия последней позиции по стопу

 и NumberOfPositions - Возвращает количество позиций, да и другие гляньте - мож подойдут к решению Вашего вопроса...


СПАСИБО ДРУЖИЩЕ БУДУ КОПАТЬ :D
 

 Решил я понять как работает индикатор ATR, и, заодно, изучить его код. Суть то  понял, но странно он написан.

Вот его функция start:

int start()
  {
   int i,counted_bars=IndicatorCounted();
//----
   if(Bars<=AtrPeriod) return(0);
//---- initial zero
   if(counted_bars<1)
      for(i=1;i<=AtrPeriod;i++) AtrBuffer[Bars-i]=0.0;
//----
   i=Bars-counted_bars-1;
   while(i>=0)
     {
      double high=High[i];
      double low =Low[i];
      if(i==Bars-1) TempBuffer[i]=high-low;
      else
        {
         double prevclose=Close[i+1];
         TempBuffer[i]=MathMax(high,prevclose)-MathMin(low,prevclose);
        }
      i--;
     }
//----
   if(counted_bars>0) counted_bars--;
   int limit=Bars-counted_bars;
   for(i=0; i<limit; i++)
      AtrBuffer[i]=iMAOnArray(TempBuffer,Bars,AtrPeriod,0,MODE_SMA,i);
//----
   return(0);
  }
//+----------------

 Вот первый блок с непоняткой:

//---- initial zero
   if(counted_bars<1)
      for(i=1;i<=AtrPeriod;i++) AtrBuffer[Bars-i]=0.0;
//----

 Какой смыл что-либо делать, если значение counted_bars<1. По-моему это значит что индикатор не просчитал ни одного бара, и нужно просто выйти из функции, т.к. значений никаких ещё нет... В чём подвох?

 Почему AtrBuffer с индексом [Bars-i] ? Ведь я так понял, тут смысл в том, что если нет значений, то задать буферу значение 0.0. Но тут же получается что значение 0.0 задаётся только для баров от (Bars) до (AtrPeriod), а от AtrPeriod до 0-ого бара ничего в буфер не записываем. Почему?

 Я логики не понял этого фрагмента кода

 В следующем блоке:

//----
   i=Bars-counted_bars-1;
   while(i>=0)
     {
      double high=High[i];
      double low =Low[i];
      if(i==Bars-1) TempBuffer[i]=high-low;
      else
        {
         double prevclose=Close[i+1];
         TempBuffer[i]=MathMax(high,prevclose)-MathMin(low,prevclose);
        }
      i--;
     }
//----

 В строчке:

if(i==Bars-1) TempBuffer[i]=high-low;

  Условие, если i==Bars-1. Выходит, что учитывается значение 1-ого бара с начала графика слева.. НО это очень далеко, какой прок с этого значения?

 

Нужна помощь! 

Как сделать чтоб советник закрывал все открытые и отложенные ордера при заданном уровне просадки, например в 30%, после чего перезапускался и начинал все с начала???

Файлы:
 
OrderSend
(  string symbol, int cmd, double volume, double price, int slippage,
double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)

Подскажите пожалуйста в функции установки ордера есть параметр  datetime expiration , что в нем нужно прописать чтобы отложенный ордер, если не сработал, сам удалялся к примеру через 5 минут ? TimeCurrent()+300 или нетак ?

 
BeerGod:

Подскажите пожалуйста в функции установки ордера есть параметр  datetime expiration , что в нем нужно прописать чтобы отложенный ордер, если не сработал, сам удалялся к примеру через 5 минут ? TimeCurrent()+300 или нетак ?

там указываются секунды, если я не ошибаюсь. так что ты прав 5 мин будет 300.  попробуй использовать время открытия без стопа и профита и время закрытия, выводи на Print там сравнишь, я так делаю.
 
Всем привет. люби помогите разобраться, ставка 0.10 стоп 200пип какую сумму мне надо иметь чтоб выдержать 200пип?
 
laveosa:
Всем привет. люби помогите разобраться, ставка 0.10 стоп 200пип какую сумму мне надо иметь чтоб выдержать 200пип?
Ну это зависит от того на каком счёте работаете, напр. на нормальном или центовом. Бывает что 1 пункт для 0.01 лота = 1 цент (х10х200 = 20 USD), а бывает что 1 пункт для 0.01 лота = 10 центов (х10х200 = 200 USD).
 
paladin80:
Ну это зависит от того на каком счёте работаете, напр. на нормальном или центовом. Бывает что 1 пункт для 0.01 лота = 1 цент (х10х200 = 20 USD), а бывает что 1 пункт для 0.01 лота = 10 центов (х10х200 = 200 USD).
у меня 1 пункт-1 цент. получается мне надо 20USD чтоб выдержать движение вниз до стопа размером в 200 пунктов?