Метатрейдер взрыв мозга

 
#include <Trade/Trade.mqh>
#include <Trade/SymbolInfo.mqh>

input double StopLoss         = 500;  // Initial stop-loss
input double lotSize          = 3;    // Initial lot size
input double lotSizeStep      = 3;    // Initial lot size increment
input double TargetPriceOverride = 0; // Override TargetPrice


//--- variables
MqlDateTime CurrentTime;
MqlTick Tick;
CTrade Trade;
CPositionInfo Position;
CSymbolInfo Sym;
COrderInfo Order;

double TargetPrice,TargetLong,TargetLong1,TargetShort,Lots,Balance=100,MaxBalance=0,Xbalance=0,Xmin=100,Xinit=0,Y=0,TrailingStop=0;
ulong TrailingTicket=-1;
string const TrailingComment="trailing",InfoLabelName="InfoLabel";


void OnTick()
  {
   SymbolInfoTick(Symbol(),Tick);
   TimeCurrent(CurrentTime);

   CopyTime(_Symbol,_Period,0,2,Time);//получаем время последних 2 баров на текущем ТФ

   if(int(Time[0]/86400)!=int(Time[1]/86400)) //новый день
     {
      CalculatePrice();
      SetupOrders();          
     }

void CalculatePrice()
  {
   double price[];
   MqlDateTime OpenTime;
   int deviant;
   TimeCurrent(OpenTime);
   OpenTime.hour = startHour;
   OpenTime.min  = 00;
   OpenTime.sec  = 00;

   CopyOpen(_Symbol,PERIOD_CURRENT,StructToTime(OpenTime),1,price);

   TargetPrice = price[0];
   TargetLong  = TargetPrice + StopLoss;
   TargetShort = TargetPrice - StopLoss;

  }

void SetupOrders()

  {

   Trade.SetTypeFilling(ORDER_FILLING_RETURN);

   Trade.BuyStop (volume(), TargetLong,  _Symbol, 0, 0, ORDER_TIME_DAY);

   Trade.SellStop(volume(), TargetShort, _Symbol, 0, 0, ORDER_TIME_DAY);

  }


Это не весь код а его часть

в таком виде ордера открываются
если стоп лос задать 508 или 492 - ордера дают ошибку

    TargetLong  = TargetPrice + 500; работает

   TargetLong  = TargetPrice + 492; - ошибка invalid price 

TargetLong  = TargetPrice + 508; - ошибка invalid price 

 

TargetLong  = NormalizeDouble(TargetPrice+492,_Digits); // ошибка

failed buy stop 1.00 RTS-3.16 at 72342 [Invalid price]

 

Инструмент фьюч на РТС 


ЧТО я делаю не так?

 

StopLoss

надо умножать на Point 

 
Profuter:

    TargetLong  = TargetPrice + 500; работает

   TargetLong  = TargetPrice + 492; - ошибка invalid price 

TargetLong  = TargetPrice + 508; - ошибка invalid price 

 

TargetLong  = NormalizeDouble(TargetPrice+492,_Digits); // ошибка

failed buy stop 1.00 RTS-3.16 at 72342 [Invalid price]

 

Инструмент фьюч на РТС 


ЧТО я делаю не так?

Вы не учитываете шаг цены (TICKSISE), у фьюч РТС шаг цены = 10 пунктов.

Нужно нормализовать цену с учетом шага цены. 

Попробуйте эту функцию, хотя я пользую попроще. 

double ND(double var) { return(NormalizeDouble(var/ticksize,0)*ticksize); }
ФОРТС: В помощь начинающим
ФОРТС: В помощь начинающим
  • www.mql5.com
Установка отложенного ордера командой OrderSend(). - Страница 2 - Категория: биржевой трейдинг
 
Sergey Chalyshev:

Вы не учитываете шаг цены (TICKSISE), у фьюч РТС шаг цены = 10 пунктов.

Нужно нормализовать цену с учетом шага цены. 

Попробуйте эту функцию, хотя я пользую попроще. 

Благодарю за ответы :)
Причина обращения: