← К каталогу
Исходный код · ID 396

NASDAQ Robotron

nasdaq robotron.mq4
Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

NASDAQ Robotron — торговый советник для MetaTrader 4, работающий по символу текущего графика. Советник анализирует ценовые структуры на завершённых барах и выставляет отложенные стоп-заявки на покупку и продажу, сопровождая уже открытые позиции. Логика построена на нескольких независимых сценариях входа, которые можно включать и отключать через настройки.

Советник поддерживает сценарии по структурам максимумов и минимумов, а также сценарии на основе внутренних барных формаций (IB). Для каждого сценария задаются отдельные сроки истечения отложенных заявок, а также отдельные коэффициенты для расчёта уровней. Расчёт уровней входа, тейк-профита и стоп-лосса выполняется на основе значений индикатора ATR на часовом таймфрейме и текущего спреда.

Сопровождение позиций включает перевод стоп-лосса в безубыток, уменьшение риска и трейлинг-стоп по структуре свечей. Размер торгового объёма задаётся либо фиксированным значением, либо рассчитывается от свободной маржи с учётом шага и ограничений по объёму инструмента. Советник использует магический номер для идентификации своих заявок и учитывает допустимый спред и проскальзывание при торговых операциях.

Настройки программы

НастройкаОписание
LHLLAndHHHL Структуры LHLL и HHHL — Включает сценарии входа по структурам более низких минимумов и более высоких максимумов.
LHLLAndHHHLWithin Внутри структур LHLL и HHHL — Включает сценарии входа внутри структур LHLL и HHHL.
ReversalIB Разворот по IB — Включает сценарии входа на разворот по внутренним барным формациям.
ReversalIBWithin Разворот внутри IB — Включает сценарии входа внутри разворотных внутренних барных формаций.
ContinuationIB Продолжение по IB — Включает сценарии входа на продолжение движения по внутренним барным формациям.
FixedLot Фиксированный лот — Фиксированный торговый объём. Если значение больше нуля, используется вместо расчёта от маржи.
PercentMargin Процент маржи — Процент свободной маржи, используемый для расчёта торгового объёма, когда фиксированный лот не задан.
P1Filter Фильтр входа в пунктах — Фильтр входа в пунктах, добавляемый к цене входа.
PeriodATRH Период ATR — Период индикатора ATR на часовом таймфрейме для расчёта уровней.
ATRHKoeffTP Коэффициент ATR для тейк-профита — Коэффициент ATR для расчёта уровня тейк-профита относительно цены входа.
ATRHKoeffSL Коэффициент ATR для стоп-лосса — Коэффициент ATR для расчёта уровня стоп-лосса относительно цены входа.
ATRHKoeffBreak Коэффициент ATR для безубытка — Коэффициент ATR для расчёта уровня, при достижении которого стоп-лосс переводится в безубыток.
RSLKoeff Коэффициент уменьшенного стоп-лосса — Коэффициент для расчёта уровня уменьшенного стоп-лосса.
ExpirationEntryType1 Срок истечения заявок типа 1 — Срок действия отложенных заявок первого типа входа в часах.
ExpirationSpecialEntryType1 Специальный срок истечения заявок типа 1 — Специальный срок действия отложенных заявок первого типа входа в часах.
ATRHKoeffForSpecialExpirationEntryType1 Коэффициент ATR для специального срока входа типа 1 — Коэффициент ATR, определяющий выбор специального срока истечения для заявок первого типа входа.
ExpirationEntryType2 Срок истечения заявок типа 2 — Срок действия отложенных заявок второго типа входа в часах.
ExpirationEntryType3 Срок истечения заявок типа 3 — Срок действия отложенных заявок третьего типа входа в часах.
ExpirationEntryType4 Срок истечения заявок типа 4 — Срок действия отложенных заявок четвёртого типа входа в часах.
ExpirationEntryType5 Срок истечения заявок типа 5 — Срок действия отложенных заявок пятого типа входа в часах.
ATRHKoeffForTrailingStop Коэффициент ATR для трейлинг-стопа — Коэффициент ATR для расчёта уровня трейлинг-стопа при сопровождении позиции.
AllowableSpread Допустимый спред — Максимально допустимый спред в пунктах для выполнения торговых операций.
Magic Магический номер — Магический номер для идентификации заявок советника.
Slippage Проскальзывание — Допустимое проскальзывание в пунктах при отправке торговых заявок.
Получить полный код

Поиск по коду файла

#property version   "2.00"
#property strict

input bool LHLLAndHHHL = true;
input bool LHLLAndHHHLWithin = true;
input bool ReversalIB = true;
input bool ReversalIBWithin = true;
input bool ContinuationIB = true;

input double FixedLot = 0.01;
input double PercentMargin = 1.0;

input int P1Filter = 1;
input int PeriodATRH = 120;
input double ATRHKoeffTP = 1.9;
input double ATRHKoeffSL = 1.3;
input double ATRHKoeffBreak = 0.2;
input double RSLKoeff = 0.5;

input int ExpirationEntryType1 = 12;
input int ExpirationSpecialEntryType1 = 2;
input double ATRHKoeffForSpecialExpirationEntryType1 = 2.0;
input int ExpirationEntryType2 = 12;
input int ExpirationEntryType3 = 1;
input int ExpirationEntryType4 = 1;
input int ExpirationEntryType5 = 1;

input double ATRHKoeffForTrailingStop = 0.2;
input int AllowableSpread = 50;
input int Magic = 256833;
input int Slippage = 10;

double stoplevel, freezy, hi, lo;
double ATRH, spread, entry, TP, SL, Break, RSL, RSLT;
datetime expir, LE1_TimeSBar, SE1_TimeSBar, LE3_TimeSBar, SE3_TimeSBar, LE5_TimeSBar, SE5_TimeSBar;
int shiftSBar;

int OnInit()
  {
      // код доступен только после оплаты
   }

void OnDeinit(const int reason)
  {

  }

void OnTick()
  {
      // код доступен только после оплаты
   }

   int total = OrdersTotal();
   for(int i=0; i<total; i++) {
      if(OrderSelect(i,SELECT_BY_POS) && OrderSymbol()==_Symbol && OrderMagicNumber()==Magic) {
         int f = StringFind(OrderComment(),"S");
         if(f>=0 && OrderType()==OP_BUY && isHHHL()) {
            double spr = StringToDouble(StringSubstr(OrderComment(),f+1));
            int bshift = iBarShift(_Symbol,PERIOD_CURRENT,OrderOpenTime(),false);
            double highest = High[iHighest(_Symbol,PERIOD_CURRENT,MODE_HIGH,bshift,0)];
            computeForLongDt(bshift+1,spr);
            if(highest>=TP) {
               double newsl = NormalizeDouble(Low[bshift+2] - ATRH*ATRHKoeffForTrailingStop,_Digits);
               if(newsl>OrderStopLoss()) {
                  Print("HHHL traling stop for buy ("+DoubleToStr(newsl,_Digits)+","+DoubleToStr(OrderStopLoss(),_Digits)+") ["+DoubleToStr(ATRH,_Digits)+","+DoubleToStr(spread,0)+","+DoubleToStr(entry,_Digits)+","+DoubleToStr(TP,_Digits)+","+DoubleToStr(SL,_Digits)+","+DoubleToStr(Break,_Digits)+","+DoubleToStr(RSL,_Digits)+","+DoubleToStr(RSLT,_Digits)+"]");
                  modifyBuy(OrderTicket(),OrderOpenPrice(),newsl,OrderTakeProfit(),OrderExpiration()); return;
               }
            }
         }
         else if(f>=0 && OrderType()==OP_SELL && isLHLL()) {
            double spr = StringToDouble(StringSubstr(OrderComment(),f+1));
            int bshift = iBarShift(_Symbol,PERIOD_CURRENT,OrderOpenTime(),false);
            double lowest = Low[iLowest(_Symbol,PERIOD_CURRENT,MODE_LOW,bshift,0)];
            computeForShortDt(bshift+1,spr);
            if(lowest<=TP) {
               double newsl = NormalizeDouble(High[bshift+2] + ATRH*ATRHKoeffForTrailingStop,_Digits);
               if(newsl<OrderStopLoss()) {
                  Print("LHLL traling stop for sell ("+DoubleToStr(newsl,_Digits)+","+DoubleToStr(OrderStopLoss(),_Digits)+") ["+DoubleToStr(ATRH,_Digits)+","+DoubleToStr(spread,0)+","+DoubleToStr(entry,_Digits)+","+DoubleToStr(TP,_Digits)+","+DoubleToStr(SL,_Digits)+","+DoubleToStr(Break,_Digits)+","+DoubleToStr(RSL,_Digits)+","+DoubleToStr(RSLT,_Digits)+"]");
                  modifySell(OrderTicket(),OrderOpenPrice(),newsl,OrderTakeProfit(),OrderExpiration()); return;
               }
            }
         }

         else if(f>=0 && OrderType()==OP_BUY) {
            double spr = StringToDouble(StringSubstr(OrderComment(),f+1));
            int bshift = iBarShift(_Symbol,PERIOD_CURRENT,OrderOpenTime(),false);
            computeForLongDt(bshift+1,spr);
            double newsl = 0.0;
            string text = "";
            if(Close[0]>=RSLT) { text = "RSL reduce risk movement stoploss for buy ("; newsl = NormalizeDouble(RSL,_Digits); }
            else if(Close[0]>=Break) { text = "Breakeven movement stoploss for buy ("; newsl = OrderOpenPrice(); }
            if(newsl>OrderStopLoss()) {
               Print(text+DoubleToStr(newsl,_Digits)+","+DoubleToStr(OrderStopLoss(),_Digits)+") ["+DoubleToStr(ATRH,_Digits)+","+DoubleToStr(spread,0)+","+DoubleToStr(entry,_Digits)+","+DoubleToStr(TP,_Digits)+","+DoubleToStr(SL,_Digits)+","+DoubleToStr(Break,_Digits)+","+DoubleToStr(RSL,_Digits)+","+DoubleToStr(RSLT,_Digits)+"]");
               modifyBuy(OrderTicket(),OrderOpenPrice(),newsl,OrderTakeProfit(),OrderExpiration()); return;
            }
         }
         else if(f>=0 && OrderType()==OP_SELL) {
            double spr = StringToDouble(StringSubstr(OrderComment(),f+1));
            int bshift = iBarShift(_Symbol,PERIOD_CURRENT,OrderOpenTime(),false);
            computeForShortDt(bshift+1,spr);
            double newsl = 0.0;
            string text = "";
            if(Close[0]<=RSLT) { text = "RSL reduce risk movement stoploss for sell ("; newsl = NormalizeDouble(RSL,_Digits); }
            else if(Close[0]<=Break) { text = "Breakeven movement stoploss for sell ("; newsl = OrderOpenPrice(); }
            if(newsl>0.0 && newsl<OrderStopLoss()) {
               Print(text+DoubleToStr(newsl,_Digits)+","+DoubleToStr(OrderStopLoss(),_Digits)+") ["+DoubleToStr(ATRH,_Digits)+","+DoubleToStr(spread,0)+","+DoubleToStr(entry,_Digits)+","+DoubleToStr(TP,_Digits)+","+DoubleToStr(SL,_Digits)+","+DoubleToStr(Break,_Digits)+","+DoubleToStr(RSL,_Digits)+","+DoubleToStr(RSLT,_Digits)+"]");
               modifySell(OrderTicket(),OrderOpenPrice(),newsl,OrderTakeProfit(),OrderExpiration()); return;
            }
         }
      }
   }

   if(LHLLAndHHHL && LHLLAndHHHLWithin && LE1_TimeSBar>0 && isLHLL() && Low[2]>Low[1] && Low[3]>Low[1] && Low[4]>Low[1] && Low[5]>Low[1]) {
      shiftSBar = iBarShift(_Symbol,PERIOD_CURRENT,LE1_TimeSBar,false) - 1;
      hi = High[iHighest(_Symbol,PERIOD_CURRENT,MODE_HIGH,shiftSBar,0)];
      lo = Low[iLowest(_Symbol,PERIOD_CURRENT,MODE_LOW,shiftSBar,0)];
      if(shiftSBar>=0 && hi<=High[shiftSBar+1] && lo>=Low[shiftSBar]) {
         if(getTicketByComment("WLHLL"+IntegerToString(Time[1]))==0) {
            computeForLong();
            expir = TimeCurrent()+ExpirationEntryType2*60*60;
            Print("Place Long Entry Type2");
            buyStop(getLots(), NormalizeDouble(entry,_Digits), NormalizeDouble(SL,_Digits), NormalizeDouble(TP,_Digits), "WLHLL"+IntegerToString(Time[1]), expir); return;
         }
      }
   }

   if(LHLLAndHHHL && LHLLAndHHHLWithin && SE1_TimeSBar>0 && isHHHL() && High[2]<High[1] && High[3]<High[1] && High[4]<High[1] && High[5]<High[1]) {
      shiftSBar = iBarShift(_Symbol,PERIOD_CURRENT,SE1_TimeSBar,false) - 1;
      hi = High[iHighest(_Symbol,PERIOD_CURRENT,MODE_HIGH,shiftSBar,0)];
      lo = Low[iLowest(_Symbol,PERIOD_CURRENT,MODE_LOW,shiftSBar,0)];
      if(shiftSBar>=0 && hi<=High[shiftSBar] && lo>=Low[shiftSBar+1]) {
         if(getTicketByComment("WHHHL"+IntegerToString(Time[1]))==0) {
            computeForShort();
            expir = TimeCurrent()+ExpirationEntryType2*60*60;
            Print("Place Short Entry Type2");
            sellStop(getLots(), NormalizeDouble(entry,_Digits), NormalizeDouble(SL,_Digits), NormalizeDouble(TP,_Digits), "WHHHL"+IntegerToString(Time[1]), expir); return;
         }
      }
   }

   if(LHLLAndHHHL && isLHLL() && Low[2]>Low[1] && Low[3]>Low[1] && Low[4]>Low[1] && Low[5]>Low[1]) {
      if(LE1_TimeSBar>0) {
         shiftSBar = iBarShift(_Symbol,PERIOD_CURRENT,LE1_TimeSBar,false)-1;
         hi = High[iHighest(_Symbol,PERIOD_CURRENT,MODE_HIGH,shiftSBar,0)];
         lo = Low[iLowest(_Symbol,PERIOD_CURRENT,MODE_LOW,shiftSBar,0)];
      }
      if((LE1_TimeSBar==0 || (shiftSBar>=0 && hi>High[shiftSBar+1] && lo<Low[shiftSBar])) && getTicketByComment("LHLL"+IntegerToString(Time[1]))==0) {
         computeForLong();
         LE1_TimeSBar = Time[1];
         if(High[2]-Low[1]>ATRH*ATRHKoeffForSpecialExpirationEntryType1) expir = TimeCurrent()+ExpirationSpecialEntryType1*60*60;
         else expir = TimeCurrent()+ExpirationEntryType1*60*60;
         int t = getTicketByComment("LHLL");
         if(t>0) {
            if(OrderSelect(t,SELECT_BY_TICKET) && OrderType()==OP_BUYSTOP) {
               bool d = OrderDelete(t,clrSilver);
               if(!d) Print("Error delete order "+IntegerToString(_LastError));
               return;
            }
         }
         Print("Place Long Entry Type1");
         buyStop(getLots(), NormalizeDouble(entry,_Digits), NormalizeDouble(SL,_Digits), NormalizeDouble(TP,_Digits), "LHLL"+IntegerToString(LE1_TimeSBar)+"S"+DoubleToString(spread,0), expir); return;
      }
   }

   if(LHLLAndHHHL && isHHHL() && High[2]<High[1] && High[3]<High[1] && High[4]<High[1] && High[5]<High[1]) {
      if(SE1_TimeSBar>0) {
         shiftSBar = iBarShift(_Symbol,PERIOD_CURRENT,SE1_TimeSBar,false)-1;
         hi = High[iHighest(_Symbol,PERIOD_CURRENT,MODE_HIGH,shiftSBar,0)];
         lo = Low[iLowest(_Symbol,PERIOD_CURRENT,MODE_LOW,shiftSBar,0)];
      }
      if((SE1_TimeSBar==0 || (shiftSBar>=0 && hi>High[shiftSBar] && lo<Low[shiftSBar+1])) && getTicketByComment("HHHL"+IntegerToString(Time[1]))==0) {
         computeForShort();
         SE1_TimeSBar = Time[1];
         if(High[1]-Low[2]>ATRH*ATRHKoeffForSpecialExpirationEntryType1) expir = TimeCurrent()+ExpirationSpecialEntryType1*60*60;
         else expir = TimeCurrent()+ExpirationEntryType1*60*60;
         int t = getTicketByComment("HHHL");
         if(t>0) {
            if(OrderSelect(t,SELECT_BY_TICKET) && OrderType()==OP_SELLSTOP) {
               bool d = OrderDelete(t,clrSilver);
               if(!d) Print("Error delete order "+IntegerToString(_LastError));
               return;
            }
         }
         Print("Place Short Entry Type1");
         sellStop(getLots(),NormalizeDouble(entry,_Digits), NormalizeDouble(SL,_Digits), NormalizeDouble(TP,_Digits),"HHHL"+IntegerToString(SE1_TimeSBar)+"S"+DoubleToString(spread,0),expir); return;
      }
   }

   if(ReversalIBWithin && ((ReversalIB && LE3_TimeSBar>0)|| (ContinuationIB && LE5_TimeSBar>0 && Low[7]>Low[2] && Low[8]>Low[2] && Low[9]>Low[2] && Low[10]>Low[2] && Low[11]>Low[2] && Low[12]>Low[2] && Low[13]>Low[2] && Low[14]>Low[2])) && isIB() && Low[3]>Low[2] && Low[4]>Low[2] && Low[5]>Low[2] && Low[6]>Low[2]) {
      if(LE3_TimeSBar>0) {
         shiftSBar = iBarShift(_Symbol,PERIOD_CURRENT,LE3_TimeSBar,false) - 1;
         hi = High[iHighest(_Symbol,PERIOD_CURRENT,MODE_HIGH,shiftSBar,0)];
         lo = Low[iLowest(_Symbol,PERIOD_CURRENT,MODE_LOW,shiftSBar,0)];
         if(shiftSBar>=0 && hi<=High[shiftSBar+1] && lo>=Low[shiftSBar]) {
            if(getTicketByComment("WLIB"+IntegerToString(Time[1]))==0) {
               computeForLong();
               expir = TimeCurrent()+ExpirationEntryType4*60*60;
               Print("Place Long Entry Type4");
               buyStop(getLots(), NormalizeDouble(entry,_Digits), NormalizeDouble(SL,_Digits), NormalizeDouble(TP,_Digits), "WLIB"+IntegerToString(Time[1]), expir); return;
            }
         }
      }
      if(LE5_TimeSBar>0) {
         shiftSBar = iBarShift(_Symbol,PERIOD_CURRENT,LE5_TimeSBar,false) - 1;
         hi = High[iHighest(_Symbol,PERIOD_CURRENT,MODE_HIGH,shiftSBar,0)];
         lo = Low[iLowest(_Symbol,PERIOD_CURRENT,MODE_LOW,shiftSBar,0)];
         if(shiftSBar>=0 && hi<=High[shiftSBar+1] && lo>=Low[shiftSBar]) {
            if(getTicketByComment("WLIB"+IntegerToString(Time[1]))==0) {
               computeForLon

Показано первые 50% кода (символов: 18957)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

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

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
1 895,70₽ ≈ $23.17