Fast Scalper

Fast Scalper最新版

更新日期:2022-03-13分类标签: 语言:中文平台:没限制

211 人已下载 手机查看

Fast Scalper

//+——————————————————————+
//| Fast Scalper.mq4 |
//| MFOREX.PRO |
//| https://www.mforex.pro |
//+——————————————————————+
#property copyright “MFOREX.PRO”
#property link “https://www.mforex.pro”
#property version “1.00”
//+——————————————————————+
//|========================= Параметры ==============================|
//+——————————————————————+
extern double Risk =1; //Риск в процентах
extern double StopLoss =1; //Стоп в пунктах, если =0 то не работает
extern double MaxStopLoss =15; //Максимальный стоп в пунктах
extern double MinStopLoss =5; //Минимальный стоп в пунктах
extern double Tral =5; //Трал в пунктах, если =0 то не работает
extern double TralStart =1; //Шаг трала в пунктах
extern double TimeStart =1; //Время начала работы
extern double TimeEnd =23; //Время завершения работы
extern double PipsStep =1; //На сколько пунктов выше/ниже ставим отложку от хай/лоу
extern double Magic =2021; //Маркер ордеров
extern bool Info =true; //Вкл/выкл вывод информации на график
extern color TextColor =White; // Цвет текста
extern color InfoDataColor =DodgerBlue; // Цвет данных в таблице Info
extern color FonColor =Black; // Цвет фона блоков
extern int FontSizeInfo =7; // размер шрифта
//+——————————————————————+
//|====================== Доп. Переменные ===========================|
//+——————————————————————+
string Commemt =”www.mforex.pro”;
int D,o;
double Lot =0;
double Slb,Sls;
double spread;
datetime NewBar =0;
//+——————————————————————+
//|====================== Инициализация =============================|
//+——————————————————————+
int OnInit()
{
EventSetMillisecondTimer(10);
D=1;
if (Digits==5 || Digits==3)
{D=10;}
return(INIT_SUCCEEDED);
}
//+——————————————————————+
//|===================== ДеИнициализация ============================|
//+——————————————————————+
void OnDeinit(const int reason)
{
EventKillTimer();
ObjectsDeleteAll(0,OBJ_LABEL);
ObjectsDeleteAll(0,OBJ_RECTANGLE_LABEL);
}
//+——————————————————————+
//|======================== Старт ===================================|
//+——————————————————————+
void OnTick()
{
//======= Находим лот
Lot=NormalizeDouble(AccountBalance()/10*Risk/(MarketInfo(Symbol(),MODE_TICKVALUE)*100*D),2);
if(Lot<MarketInfo(Symbol(),MODE_MINLOT)) {Lot=MarketInfo(Symbol(),MODE_MINLOT);}
if(Lot>=MarketInfo(Symbol(),MODE_MAXLOT)) {Lot=MarketInfo(Symbol(),MODE_MAXLOT);}
//======= Вычисляем спред
spread=(Ask-Bid)/Point;
//======= Находим стоп лосс
Slb=Low[0]-StopLoss*Point;
if(Bid-Slb>MaxStopLoss*Point)
{Slb=Bid-MaxStopLoss*Point;}
if(Bid-Slb<MinStopLoss*Point)
{Slb=Bid-MinStopLoss*Point;}

Sls=High[0]+StopLoss*Point;
if(Sls-Ask>MaxStopLoss*Point)
{Sls=Ask+MaxStopLoss*Point;}
if(Sls-Ask<MinStopLoss*Point)
{Sls=Ask+MinStopLoss*Point;}
//======= Открываем ордера
if(TimeHour(TimeCurrent())>=TimeStart && TimeHour(TimeCurrent())<TimeEnd)
{
if(CountHistBar(-1)==0 && Count(OP_SELL)==0 && Count(OP_BUY)==0 && Count(OP_SELLSTOP)==0 && Low[1]-PipsStep*Point<Bid && High[1]+PipsStep*Point>Ask)
{o=OrderSend(Symbol(),OP_SELLSTOP,Lot,Low[1]-PipsStep*Point,1,0,0,Commemt,Magic,0,Red);}

if(CountHistBar(-1)==0 && Count(OP_SELL)==0 && Count(OP_BUY)==0 && Count(OP_BUYSTOP)==0 && Low[1]-PipsStep*Point<Bid && High[1]+PipsStep*Point>Ask)
{o=OrderSend(Symbol(),OP_BUYSTOP,Lot,High[1]+PipsStep*Point,1,0,0,Commemt,Magic,0,Green);}
}
//======= Проверяем наличие стопа
if(Count(OP_BUY)>0 || Count(OP_SELL)>0) {ModOrder();}
//======= Устанавливаем трал ордеров
if(Count(OP_BUY)>0 || Count(OP_SELL)>0) {Traling();}
//======= Переносим отложки
if(NewBar!=Time[0] && Count(OP_SELLSTOP)>0 && Count(OP_BUYSTOP)>0)
{
ModSetOrder(OP_BUYSTOP,High[1]+PipsStep*Point);
ModSetOrder(OP_SELLSTOP,Low[1]-PipsStep*Point);
NewBar=Time[0];
}
//======= Удаляем не отработанные отложки
if(Count(OP_SELL)>0 && Count(OP_BUYSTOP)>0)
{CloserSet(OP_BUYSTOP);}
if(Count(OP_BUY)>0 && Count(OP_SELLSTOP)>0)
{CloserSet(OP_SELLSTOP);}
//======= Вывод информации на график
if(Info)
{
RectLabelCreate3(“INFO_fon”,220,20,200,225,FonColor);

PutLabel(“INFO_LOGO”,165,24,”WWW.MFOREX.PRO”);
PutLabel(“INFO_Line”,215,27,”___________________________”);
PutLabel_(“INFO_txt1″,215,45,”Account information”);
PutLabel(“INFO_Line2″,215,47,”___________________________”);
PutLabel(“INFO_txt2″,215,65,”Minimum stop:”);
PutLabel(“INFO_txt3″,215,80,”Spread:”);
PutLabel(“INFO_txt4″,215,95,”Balanse:”);
PutLabel(“INFO_txt5″,215,110,”Equity:”);
PutLabel(“INFO_Line3″,215,112,”___________________________”);
PutLabel_(“INFO_txt6″,215,130,”Profit on account”);
PutLabel(“INFO_Line4″,215,132,”___________________________”);
PutLabel(“INFO_txt7″,215,150,”Profit on pair:”);
PutLabel(“INFO_txt8″,215,165,”Total profit:”);
PutLabel(“INFO_txt9″,215,180,”Profit for today:”);
PutLabel(“INFO_txt10″,215,195,”Profit for yesterday:”);
PutLabel(“INFO_txt11″,215,210,”Profit for week:”);
PutLabel(“INFO_txt12″,215,225,”Profit for month:”);

PutLabel_(“INFO_txt13”,85,65,MarketInfo(Symbol(),MODE_STOPLEVEL));
PutLabel_(“INFO_txt14”,85,80,(Ask-Bid)/Point);
PutLabel_(“INFO_txt15”,85,95,AccountBalance());
PutLabel_(“INFO_txt16”,85,110,AccountEquity());
PutLabel_(“INFO_txt17”,85,150,Profit(-1));
PutLabel_(“INFO_txt18”,85,165,ProfitAll(-1));
PutLabel_(“INFO_txt19”,85,180,ProfitDey(-1));
PutLabel_(“INFO_txt20”,85,195,ProfitTuDey(-1));
PutLabel_(“INFO_txt21”,85,210,ProfitWeek(-1));
PutLabel_(“INFO_txt22″,85,225,ProfitMontag(-1));
}
//======= Завершение
}
//+——————————————————————+
//|========================== Функции ===============================|
//+——————————————————————+
//======== Счетчик ордеров в истории на текущем баре ================
int CountHistBar(int type)
{
int count=0;
for(int i=OrdersHistoryTotal()-1;i>=0;i–)
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(Symbol()==OrderSymbol() && OrderMagicNumber()==Magic && OrderCloseTime()>=iTime(Symbol(),0,0) && (type==-1 || OrderType()==type))
{
count++;
}
}
return(count);}
//======= Модификация ордеров
void ModOrder()
{int tic;
bool mod;
for(int i=OrdersTotal()-1;i>=0;i–)
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
tic=OrderTicket();

if (OrderType()==OP_BUY && OrderStopLoss()==0)
{mod=OrderModify(tic,OrderOpenPrice(),Slb,OrderTakeProfit(),0);}

if (OrderType()==OP_SELL && OrderStopLoss()==0)
{mod=OrderModify(tic,OrderOpenPrice(),Sls,OrderTakeProfit(),0);}
}}}
//======= Модификация отложеных ордеров
void ModSetOrder(int type, double price)
{int tic;
bool mod;
for(int i=OrdersTotal()-1;i>=0;i–)
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
tic=OrderTicket();

if (OrderType()==type)
{mod=OrderModify(tic,price,OrderStopLoss(),OrderTakeProfit(),0,Orange);}

if (OrderType()==type)
{mod=OrderModify(tic,price,OrderStopLoss(),OrderTakeProfit(),0,Orange);}
}}}

//======= Трал ордеров
void Traling()
{int tic;
double Price;
double Stop;
bool mod;
for(int i=OrdersTotal()-1;i>=0;i–)
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
tic=OrderTicket();
Price=OrderOpenPrice();
Stop=OrderStopLoss();

if (OrderType()==OP_BUY && Tral!=0)
{if(Stop<Price && Bid-(Tral+TralStart)*Point>=Price)
{mod=OrderModify(tic,OrderOpenPrice(),Price+TralStart*Point,OrderTakeProfit(),0);}
if(Stop>=Price && Bid-Tral*Point>Stop)
{mod=OrderModify(tic,OrderOpenPrice(),Bid-Tral*Point,OrderTakeProfit(),0);}}

if (OrderType()==OP_SELL && Tral!=0)
{if(Stop>Price && Ask+(Tral+TralStart)*Point<=Price)
{mod=OrderModify(tic,OrderOpenPrice(),Price-TralStart*Point,OrderTakeProfit(),0);}
if(Stop<=Price && Ask+Tral*Point<Stop)
{mod=OrderModify(tic,OrderOpenPrice(),Ask+Tral*Point,OrderTakeProfit(),0);}}
}}}

//======= Счетчик ордеров
int Count(int type)
{
int count=0;
for(int i=OrdersTotal()-1;i>=0;i–)
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(Symbol()==OrderSymbol() && Magic==OrderMagicNumber() && (type==-1 || OrderType()==type))
{
count++;
}
}
return(count);}
//===================== Функция удаления отложек
void CloserSet(int type)
{bool cl;
int tic;
for(int i=OrdersTotal()-1;i>=0;i–)
{if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{if(OrderType()==type)
{tic=OrderTicket();
RefreshRates();
cl=OrderDelete(tic,Black);}
if(OrderType()==type)
{tic=OrderTicket();
RefreshRates();
cl=OrderDelete(tic,Black);}}}}}
//======= Счетчик текущего профита по паре
double Profit(int type)
{double Profit = 0;
for (int cnt = OrdersTotal() – 1; cnt >= 0; cnt–) {
if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
{if (Symbol()==OrderSymbol() && OrderMagicNumber()==Magic && (OrderType() == type || type==-1)) Profit += OrderProfit()+OrderSwap()+OrderCommission();}}
return (Profit);}

//======= Счетчик текущего профита по счету
double ProfitAll(int type)
{double Profit = 0;
for (int cnt = OrdersTotal() – 1; cnt >= 0; cnt–) {
if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
{if (OrderMagicNumber()==Magic && (OrderType() == type || type==-1)) Profit += OrderProfit()+OrderSwap()+OrderCommission();}}
return (Profit);}

//======= Счетчик зафиксированой прибыли за сегодня
double ProfitDey(int type)
{double Profit = 0;
for (int cnt = OrdersHistoryTotal() – 1; cnt >= 0; cnt–) {
if(OrderSelect(cnt, SELECT_BY_POS, MODE_HISTORY))
{if (OrderMagicNumber()==Magic && OrderCloseTime()>=iTime(Symbol(),1440,0) && (OrderType() == type || type==-1)) Profit += OrderProfit()+OrderSwap()+OrderCommission();}}
return (Profit);}

//======= Счетчик зафиксированой прибыли за вчера
double ProfitTuDey(int type)
{double Profit = 0;
for (int cnt = OrdersHistoryTotal() – 1; cnt >= 0; cnt–) {
if(OrderSelect(cnt, SELECT_BY_POS, MODE_HISTORY))
{if (OrderMagicNumber()==Magic && OrderCloseTime()>=iTime(Symbol(),1440,1) && OrderCloseTime()<iTime(Symbol(),1440,0) && (OrderType() == type || type==-1)) Profit += OrderProfit()+OrderSwap()+OrderCommission();}}
return (Profit);}

//======= Счетчик зафиксированой прибыли за позавчера
double ProfitEsTuDey(int type)
{double Profit = 0;
for (int cnt = OrdersHistoryTotal() – 1; cnt >= 0; cnt–) {
if(OrderSelect(cnt, SELECT_BY_POS, MODE_HISTORY))
{if (OrderMagicNumber()==Magic && OrderCloseTime()>=iTime(Symbol(),1440,2) && OrderCloseTime()<iTime(Symbol(),1440,1) && (OrderType() == type || type==-1)) Profit += OrderProfit()+OrderSwap()+OrderCommission();}}
return (Profit);}

//======= Счетчик зафиксированой прибыли за неделю
double ProfitWeek(int type)
{double Profit = 0;
for (int cnt = OrdersHistoryTotal() – 1; cnt >= 0; cnt–) {
if(OrderSelect(cnt, SELECT_BY_POS, MODE_HISTORY))
{if (OrderMagicNumber()==Magic && OrderCloseTime()>=iTime(Symbol(),10080,0) && (OrderType() == type || type==-1)) Profit += OrderProfit()+OrderSwap()+OrderCommission();}}
return (Profit);}

//======= Счетчик зафиксированой прибыли за месяц
double ProfitMontag(int type)
{double Profit = 0;
for (int cnt = OrdersHistoryTotal() – 1; cnt >= 0; cnt–) {
if(OrderSelect(cnt, SELECT_BY_POS, MODE_HISTORY))
{if (OrderMagicNumber()==Magic && OrderCloseTime()>=iTime(Symbol(),43200,0) && (OrderType() == type || type==-1)) Profit += OrderProfit()+OrderSwap()+OrderCommission();}}
return (Profit);}

//======= Создаем текстовую метку
void PutLabel(string name,int x,int y,string text)
{ObjectCreate(0,name,OBJ_LABEL,0,0,0);
//— установим координаты метки
ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//— установим угол графика, относительно которого будут определяться координаты точки
ObjectSetInteger(0,name,OBJPROP_CORNER,1);
//— установим текст
ObjectSetString(0,name,OBJPROP_TEXT,text);
//— установим шрифт текста
ObjectSetString(0,name,OBJPROP_FONT,”Arial”);
//— установим размер шрифта
ObjectSetInteger(0,name,OBJPROP_FONTSIZE,FontSizeInfo);
//— установим цвет
ObjectSetInteger(0,name,OBJPROP_COLOR,TextColor);
//— скроем (true) или отобразим (false) имя графического объекта в списке объектов
ObjectSetInteger(0,name,OBJPROP_HIDDEN,false);
//— отобразим на переднем (false) или заднем (true) плане
ObjectSetInteger(0,name,OBJPROP_BACK,false);}

//======= Создаем вторую текстовую метку
void PutLabel_(string name,int x,int y,string text)
{ObjectCreate(0,name,OBJ_LABEL,0,0,0);
//— установим координаты метки
ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//— установим угол графика, относительно которого будут определяться координаты точки
ObjectSetInteger(0,name,OBJPROP_CORNER,1);
//— установим текст
ObjectSetString(0,name,OBJPROP_TEXT,text);
//— установим шрифт текста
ObjectSetString(0,name,OBJPROP_FONT,”Arial”);
//— установим размер шрифта
ObjectSetInteger(0,name,OBJPROP_FONTSIZE,FontSizeInfo);
//— установим цвет
ObjectSetInteger(0,name,OBJPROP_COLOR,InfoDataColor);
//— скроем (true) или отобразим (false) имя графического объекта в списке объектов
ObjectSetInteger(0,name,OBJPROP_HIDDEN,false);
//— отобразим на переднем (false) или заднем (true) плане
ObjectSetInteger(0,name,OBJPROP_BACK,false);}

//======= Создаем прямоугольник
bool RectLabelCreate3(string name, int x,int y, int width, int height, color back_clr)
{ResetLastError();
//— создадим прямоугольную метку
if(!ObjectCreate(0,name,OBJ_RECTANGLE_LABEL,0,0,0))
{return(false);}
//— установим координаты метки
ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//— установим размеры метки
ObjectSetInteger(0,name,OBJPROP_XSIZE,width);
ObjectSetInteger(0,name,OBJPROP_YSIZE,height);
//— установим цвет фона
ObjectSetInteger(0,name,OBJPROP_BGCOLOR,back_clr);
//— установим тип границы
ObjectSetInteger(0,name,OBJPROP_BORDER_TYPE,BORDER_SUNKEN);
//— установим угол графика, относительно которого будут определяться координаты точки
ObjectSetInteger(0,name,OBJPROP_CORNER,1);
//— установим цвет плоской рамки (в режиме Flat)
ObjectSetInteger(0,name,OBJPROP_COLOR,Blue);
//— установим толщину плоской границы
ObjectSetInteger(0,name,OBJPROP_WIDTH,1);
//— отобразим на переднем (false) или заднем (true) плане
ObjectSetInteger(0,name,OBJPROP_BACK,false);
//— скроем (true) или отобразим (false) имя графического объекта в списке объектов
ObjectSetInteger(0,name,OBJPROP_HIDDEN,false);
//— успешное выполнение
return(true);}
//— Таймер

void OnTimer()
{
RefreshRates();
OnTick();
}

如果你对文件有了解,请帮助投票!

If you are familiar with the file, please help vote!

平均评分 0 / 5. 投票数: 0

到目前为止还没有投票!成为第一位投票人。

相关资源

暂无评论

暂无评论...