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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.