Скачать MetaTrader 5

MQL в MQL 4

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Forex Trader
114280
Forex Trader  
Ребята помогите перевести код в MQL4!




/*[[
	Name := PST
	Author := Cyber
	Link := pr10@ukr.net
	Lots := 0.10
	Stop Loss := 30
	Take Profit := 60
	Trailing Stop := 0
]]*/
Defines: HL(85),N(9),Zapas(5); //HL- разница между экстремальными ценами, N- период, Zapas- запас в выставлении отложенного ордера
   var:s(0),b(0),ho(0),lo(0),i(0),fl(0); // s- количество отложенных OP_sellSTOP b- количество отложенных OP_BUYSTOP, i- переменная цикла
   // ho- мах цена периода, lo-минимальныя цена периода, fl-флаг для выставления второго ордера 

   If((CurTime-LastTradeTime)<11) then Exit; // 10 сек таймаут, пока он не прошел будет осуществляться выход из эксперта

   if fl=1 then // т.к. одновременно два ордера поставить нельзя, OP_sellSTOP ставится после 10 сек, с помощью флага
   {fl=0; // обнуление флага и выставление 2го отложенного
   SetOrder(OP_sellSTOP, lots, lo-Zapas * point, 3,lo +StopLoss * Point, lo-TakeProfit*Point, red);};

   b=0; // обнуление переменных для счета
   s=0;
   if TotalTrades=1 then exit; // если открыт только 1 ордер то, это ордер в рынке, выходим

   if totaltrades<>0 then
   for i=1 to TotalTrades
   Begin
   IF OrderValue(i,VAL_TYPE)=OP_BUYstop then b=b+1; // подсчет позиций в цикле
   if OrderValue(i,VAL_TYPE)=OP_SELLstop then s=s+1;
   if (s+b)=2 then exit; // если 2 отложенных выходим
   end;
   if TotalTrades<>0 and (s+b)=1 then // если 1 отложенный остался (он лишний, т.к. один уже стал сыграл, удаляем его
   { for i=1 to TotalTrades
   Begin
   if (OrderValue(i,VAL_TYPE)=OP_sellSTOP) or (OrderValue(i,VAL_TYPE)=OP_buySTOP) then
   DeleteOrder(OrderValue(i,VAL_TICKET),blue); //удаление
   end;
   exit;};

   if TotalTrades=0 and (b+s)=0 then { // нахождение минимальной, максимальной цены
   ho=h[1];
   lo=l[1];
   for i=n DownTo 1
   Begin
   if h[i]>ho then ho=h[i];
   if l[i]<lo then lo=l[i];
   end;
   };
   if TotalTrades=0 and (b+s)=0 and (ho-lo)<Hl*point then { // если открытых позиций нет и условия выполняется то
   // то выставлять 2 ордера

   fl=1;
   SetOrder(OP_BUYSTOP,lots,ho+Zapas*point,3,ho-StopLoss*Point,ho+TakeProfit*Point,blue); // 1й из 2х

   };

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий