IGNITE v 1.0
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «ignite v1.0.0 fix.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Это торговый советник для MetaTrader 5, написанный на MQL5. Советник работает на текущем символе графика и использует объект CTrade и CPositionInfo из стандартной библиотеки Trade для совершения торговых операций. В коде присутствует обработчик OnTick, а также OnInit и OnDeinit. Советник анализирует ценовые данные и показания индикатора RSI, строит уровни на основе инструмента Фибоначчи и выставляет отложенные лимитные ордера.
Настройки программы
| Настройка | Описание |
|---|---|
| StopTradingTimeonFriday | Время остановки торговли в пятницу — Время прекращения торговли в пятницу. |
| Start_trading | Время начала торговли — Время начала торговли в течение дня. |
| End_trading | Время окончания торговли — Время окончания торговли в течение дня. |
| Volume size (Lots) | Объём лота — Начальный объём лота для первой позиции. |
| Multiplier | Множитель лота — Множитель для расчёта объёма последующих позиций. |
| Initial_TakeProfit | Начальный тейк-профит — Начальный размер тейк-профита в пунктах для открываемых позиций. |
| Min_pip | Минимум пунктов — Минимальное расстояние в пунктах для построения уровней Фибоначчи. |
| Max_pip | Максимум пунктов — Максимальное расстояние в пунктах для построения уровней Фибоначчи. |
| Over_Bought | Уровень перекупленности — Уровень перекупленности индикатора RSI. |
| Over_Sold | Уровень перепроданности — Уровень перепроданности индикатора RSI. |
| Limit_Zero_Profit | Уровень нулевой прибыли — Выбор уровня Фибоначчи, при котором прибыль считается нулевой для целей управления позициями. |
| Fibo_first_tp | Первый уровень Фибоначчи для тейк-профита — Значение первого уровня Фибоначчи, используемого для установки начального тейк-профита. |
| Fibo_1 | Уровень Фибоначчи 1 — Значение первого уровня Фибоначчи для расчёта ценовых уровней. |
| Fibo_2 | Уровень Фибоначчи 2 — Значение второго уровня Фибоначчи для расчёта ценовых уровней. |
| Fibo_3 | Уровень Фибоначчи 3 — Значение третьего уровня Фибоначчи для расчёта ценовых уровней. |
| Fibo_4 | Уровень Фибоначчи 4 — Значение четвёртого уровня Фибоначчи для расчёта ценовых уровней. |
| Fibo_5 | Уровень Фибоначчи 5 — Значение пятого уровня Фибоначчи для расчёта ценовых уровней. |
| Fibo_6 | Уровень Фибоначчи 6 — Значение шестого уровня Фибоначчи для расчёта ценовых уровней. |
| Fibo_7 | Уровень Фибоначчи 7 — Значение седьмого уровня Фибоначчи для расчёта ценовых уровней. |
| Fibo_8 | Уровень Фибоначчи 8 — Значение восьмого уровня Фибоначчи для расчёта ценовых уровней. |
| Fibo_9 | Уровень Фибоначчи 9 — Значение девятого уровня Фибоначчи для расчёта ценовых уровней. |
| Fibo_10 | Уровень Фибоначчи 10 — Значение десятого уровня Фибоначчи для расчёта ценовых уровней. |
| Fibo_11 | Уровень Фибоначчи 11 — Значение одиннадцатого уровня Фибоначчи для расчёта ценовых уровней. |
| TimeFrame | Таймфрейм — Таймфрейм, используемый для расчёта индикатора RSI. |
| Push_Notification | Push-уведомления — Включает или отключает отправку push-уведомлений при создании объекта Фибоначчи. |
| Alert_Message | Всплывающее оповещение — Включает или отключает всплывающее окно Alert при создании объекта Фибоначчи. |
| MagicNumber | Магическое число — Уникальный идентификатор (магическое число) для ордеров и позиций советника. |
| PERIOD | Период RSI — Период усреднения индикатора RSI. |
Поиск по коду файла
/*+--------------------------MTLicense Block1------------------------+*/
/* product code */
string MTlic_ProductCode = "MONEYIST";
/* Title on the information display */
string MTlic_info_caption = "IGNITE v 1.0";
/* footer note on the information display */
string MTlic_info_footer = "Moneyist";
/* Heartbeat delay (900=15min, 3600=1hour, 21600=6hours, 86400=1day) */
int MTlic_heartbeat_delay = 7200;
/* Information display */
int MTLic_DrawLabel_Ygap = 0;
int MTLic_DrawLabel_Xgap = 0;
int MTLic_DrawLabel_corner_anchor_right = 0;
#include <Trade\Trade.mqh>
#define MT_WMCMD_EXPERTS 32851
#define WM_COMMAND 0x0111
#define GA_ROOT 2
#property strict
#include <Trade\PositionInfo.mqh>
#include <Trade\Trade.mqh>
CPositionInfo m_position; // trade position object
CTrade m_trade;
enum Order
{
Fibo2,
Fibo3,
Fibo4,
Fibo5,
Fibo6,
Fibo7,
Fibo8,
Fibo9,
Fibo10
};
input string StopTradingTimeonFriday="14:00";
input string Start_trading="02:00";
input string End_trading="23:00";
input double Lots = 0.01; // Volume size
input double Multiplier = 1.8;
input double Initial_TakeProfit = 7;
double StopLoss = 0.0;
input double Min_pip = 1;
input double Max_pip = 35;
input double Over_Bought = 70;
input double Over_Sold = 30;
input Order Limit_Zero_Profit = Fibo9;
input double Fibo_first_tp = 0.38;
input double Fibo_1 = 1.0;
input double Fibo_2 = 1.5;
input double Fibo_3 = 2.0;
input double Fibo_4 = 2.5;
input double Fibo_5 = 3.0;
input double Fibo_6 = 4.0;
input double Fibo_7 = 5.0;
input double Fibo_8 = 6.0;
input double Fibo_9 = 7.0;
input double Fibo_10 = 8.0;
input double Fibo_11 = 9.0;
input ENUM_TIMEFRAMES TimeFrame = PERIOD_CURRENT;
input bool Push_Notification = false;
input bool Alert_Message = false;
input int MagicNumber = 1551;
double Bid, Ask;
datetime openingTime;
long openingTimeSeconds;
string strs,level[],level_fibo[15];
int Data, count_level;
ulong lastTicket;
int Numerade;
int NumeradeProfit;
int Slipage = 1;
int LastDeal;
bool Agree;
CTrade trade;
void OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason)
{
/*+--------------------------MTLicense Block4------------------------+*/
ObjectsDeleteAll(0,"MTlic_");
Comment("");
/*+--------------------------MTLicense Block4------------------------+*/
Comment(" ");
}
string TimeToPreviousFiveMinutesString(datetime time)
{
MqlDateTime mqlTime;
TimeToStruct(time, mqlTime);
int minutes = (mqlTime.min / 5) * 5;
mqlTime.min = minutes;
datetime roundedTime = StructToTime(mqlTime);
return TimeToString(roundedTime, TIME_DATE|TIME_MINUTES);
}
double target,balance;
static datetime reorder;
int counter = 0;
double point;
void OnTick()
{
// код доступен только после оплаты
}
double TakeBuy, TakeSell;
datetime timex;
void order(int type, int from)
{
double LOT;
if(OpenPos() == 0)
{
LOT = Lots;
}
else
{
LOT = Lot[OpenPos()];
}
TakeBuy = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK) + Initial_TakeProfit*pips(),_Digits);
TakeSell = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID) - Initial_TakeProfit*pips(),_Digits);
MqlTradeRequest requestBuy= {};
requestBuy.action=TRADE_ACTION_DEAL;
requestBuy.magic=MagicNumber; // ORDER_MAGIC
requestBuy.symbol=_Symbol;
requestBuy.volume=LOT;
requestBuy.price = SymbolInfoDouble(_Symbol,SYMBOL_ASK);
requestBuy.sl=0; // Stop Loss
requestBuy.tp=TakeBuy;
requestBuy.type=ORDER_TYPE_BUY;
MqlTradeResult resultBuy= {};
MqlTradeRequest requestSell= {};
requestSell.action=TRADE_ACTION_DEAL;
requestSell.magic=MagicNumber; // ORDER_MAGIC
requestSell.symbol=_Symbol;
requestSell.volume=LOT;
requestSell.price = SymbolInfoDouble(_Symbol,SYMBOL_BID); ;
requestSell.sl=0; // Stop Loss
requestSell.tp=TakeSell; // Take Profit
requestSell.type=ORDER_TYPE_SELL;
MqlTradeResult resultSell= {};
if(timex != iTime(_Symbol, 0, 0))
{
if(type==1)
{
if(!OrderSend(requestSell,resultSell))
PrintFormat("OrderSend error %d",GetLastError());
else
{
timex = iTime(_Symbol, 0, 0);
if(cektime2 != iTime(_Symbol, 0, 0))
{
cektime2 = iTime(_Symbol, 0, 0);
tim = iTime(_Symbol, PERIOD_M1, 0);
}
if(from==0)
fib = true;
}
}
if(type==0)
{
if(!OrderSend(requestBuy,resultBuy))
PrintFormat("OrderSend error %d",GetLastError());
else
{
timex = iTime(_Symbol, 0,0);
if(cektime1 != iTime(_Symbol, 0, 0))
{
cektime1 = iTime(_Symbol, 0, 0);
tim = iTime(_Symbol, PERIOD_M1, 0);
}
if(from==0)
fib = true;
}
}
}
}
void order_limit(int type)
{
double tp;
if(type == 0)
tp = NormalizeDouble(Level[0] - point, _Digits);
else
tp = NormalizeDouble(Level[0] + point, _Digits);
int lou = 1;
while(lou < 11)
{
if(type == 0)
{
tp = NormalizeDouble(Level[lou]-point,_Digits);
if(!trade.OrderOpen(_Symbol,ORDER_TYPE_BUY_LIMIT,Lot[lou], Level[lou+1],Level[lou+1], 0, tp,0,0))
{
Sleep(100);
trade.OrderOpen(_Symbol,ORDER_TYPE_BUY_LIMIT,Lot[lou], Level[lou+1],Level[lou+1], 0, tp,0,0);
}
}
else
{
tp = NormalizeDouble(Level[lou]+point,_Digits);
if(!trade.OrderOpen(_Symbol,ORDER_TYPE_SELL_LIMIT,Lot[lou],Level[lou+1],Level[lou+1], 0, tp,0,0))
{
Sleep(100);
trade.OrderOpen(_Symbol,ORDER_TYPE_SELL_LIMIT,Lot[lou],Level[lou+1],Level[lou+1], 0, tp,0,0);
}
}
lou++;
}
Sleep(200);
modif(tp);
}
void close_position()
{
for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of current positions
if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
if(m_position.Symbol()==_Symbol && m_position.Magic()==MagicNumber)
m_trade.PositionClose(m_position.Ticket()); // close a position by the specified symbol
}
void close_pos()
{
for(int i = PositionsTotal() - 1; i >= 0; i--)
{
ResetLastError();
PositionSelectByTicket(PositionGetTicket(i));
if(PositionGetInteger(POSITION_MAGIC) == MagicNumber && PositionGetString(POSITION_SYMBOL) == _Symbol)
{
if(trade.PositionClose(PositionGetTicket(i)))
{
flag = -1;
}
else
close_position();
Print("Error", GetLastError());
}
}
closepend();
}
void closepend()
{
MqlTradeRequest req = {};
MqlTradeResult res = {};
int orders = OrdersTotal();
req.action = TRADE_ACTION_REMOVE;
for(int i = orders - 1; i >= 0 ;i--)
{
req.order = OrderGetTicket(i);
if(OrderGetString(ORDER_SYMBOL) == _Symbol)
{
ResetLastError();
if(!OrderSend(req,res))
{
Print("Fail to delete ticket ",req.order,": Error ",GetLastError(),", retcode = ",res.retcode);
}
else
{
flag = -1;
}
}
}
}
void history()
{
int deals=HistoryOrdersTotal();
if(deals>0)
{
ulong last_deal_ticket=HistoryOrderGetTicket(deals-1);
if(last_deal_ticket>0)
{
ENUM_ORDER_TYPE deal_type=(ENUM_ORDER_TYPE)HistoryOrderGetInteger(last_deal_ticket, ORDER_TYPE);
if(deal_type==ORDER_TYPE_BUY)
{
LastDeal = 1;
}
else
if(deal_type==ORDER_TYPE_SELL)
{
LastDeal = 0;
}
}
}
}
datetime tim;
input int PERIOD = 14;
int flag;
void signal_RSI()
{
double indi [];
int indicator_handle2 = iRSI(_Symbol, TimeFrame, PERIOD, PRICE_CLOSE);
flag = -1;
if(indicator_handle2 == INVALID_HANDLE)
{
Print("Error creating indicator handle");
return;
}
int copied_2 = CopyBuffer(indicator_handle2, 0, 0, 2, indi);
if(indi[1] >= Over_Bought)
{
flag = 1;
info3 = DoubleToString(indi[1],1);
}
if(indi[1] <= Over_Sold)
{
flag = 0;
info3 = DoubleToString(indi[1],1);
}
}
double RSI()
{
double indi [];
int indicator_handle2 = iRSI(_Symbol, TimeFrame, PERIOD, PRICE_CLOSE);
if(indicator_handle2 == INVALID_HANDLE)
{
Print("Error creating indicator handle");
}
else
{
int copied_2 = CopyBuffer(indicator_handle2, 0, 0, 2, indi);
}
return(indi[1]);
}
void check_RSI(int type)
{
double indi [];
int indicator_handle2 = iRSI(_Symbol, TimeFrame, 14, PRICE_CLOSE);
if(indicator_handle2 == INVALID_HANDLE)
{
Print("Error creating indicator handle");
return;
}
int copied_2 = CopyBuffer(indicator_handle2, 0, 0, 2, indi);
if(indi[1] > Over_Bought && flag == 0 && AccountInfoDouble(ACCOUNT_PROFIT) >0)
{
flag = -1;
close_pos();
}
if(indi[1] < OverПоказано первые 50% кода (символов: 16190)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.