指标名称:本地跟单软件
版本:MT4 ver. 2.01(EA)
我们经常在一些论坛或网站上看到一些朋友提供的观摩账户吧,可以看到别人的账户情况,遇到有实力的交易者,很是羡慕啊。
如果我们自己的账户可以跟着他们下单多好呢?今天就给大家免费共享一款智能交易EA。
可以进行本地跟单,速度快还全免费哦。
跟单EA分为发射端和接收端
-
发射端-挂在喊单信号账户上
-
接收端-跟单的账户
怎么安装,这个在EA安装教程里已经经过,这里不过多介绍,有不明白的,可以去看教程。教程在哪里?就在下一篇文章里。
1.安装发射端
打开喊单的MT4软件,双击导航里的:跟单软件发射端,然后按照以下提示勾选内容,点击确认即可。
安装好了,右上角会显示笑脸,如果没显示,检查自动交易和选项里的设置有没有正确设置。
这样,喊单软件就安装好了。
2.安装接受端
打开跟单的MT4软件,双击导航里的:跟单软件接收端,然后按照发射端一样的提示勾选内容,点击确认即可。参照上两步。
跟单与喊单不同的是参数需要设置
这里,我们需要设置对应的喊单账号,参数
如图:
最后,在喊单账户下个小单子测试跟单账户是否正常跟随。
这样,就完工了。好了,今天的学习就到这了。多研究里面的参数,多测试!
部分代码展示:
//+------------------------------------------------------------------+
//| 跟单发射端.mq4 |
//| Copyright © 2009-2024, www.QChaos.com |
//| https://www.qchaos.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 量化混沌, www.qchaos.com"
#property link "https://www.qchaos.com"
#property version "2.01"
#property description "---------------------------------------------"
#property description "EA、指标公式分享"
#property description "EA、指标编写业务承接"
#property description "---------------------------------------------"
#property description "---------------------------------------------"
#import "kernel32.dll"
int CopyFileW(string a0,string a1,int a2);
bool CreateDirectoryW(string a0,int a1);
//========================================================================
input string 跟踪主账号="";
string FILES文件夹路径="";
string 中转路径="";
string 间隔符="*";
string 中转路径2="";
string FILES文件夹路径2;
input string 货币对名称附加="";
input string 基本跟单设置模块="-----------跟单基础设置模块----------";//
input int 跟单允许秒误差=100;
input double 跟单允许点误差=100;
input bool 跟踪止损止盈=true;
input bool 跟踪平仓=true;
input bool 反向跟单=false;
input bool 跟多单=true;
input bool 跟空单=true;
input bool 跟踪挂单=true;
input string 跟单手数设置模块="-----------跟单手数设置模块----------";//
input double 单量比例=1;
input bool 使用固定单量=false;
input double 固定单量=0.1;
bool 低于最低单量时使用最低单量=false;
input string 跟单仓位设置模块="-----------跟单仓位设置模块----------";
input int 最大持单数=10000;
input double 跟主账户单量大于等于N单子=0;
input double 跟主账户单量小于等于M单子=100;
input string 跟单注释设置模块="-----------跟单注释魔术码设置模块----------";
input string 自定义部分备注="";
input string 接收订单需包含备注="";
string comm4="---------------------";
string comm5="---------------------";
string comm6="---------------------";
input string 跟单品种修正设置模块="---------个别品种无法正常跟单时使用------------";
input bool 货币对名称强制修正开关=false;
input string 所跟货币对名称1 ="";
input string 下单货币对名称1 ="";
input double 特殊跟单单量比例1=1;
input string 所跟货币对名称2 ="";
input string 下单货币对名称2 ="";
input double 特殊跟单单量比例2=1;
input string 所跟货币对名称3 ="";
input string 下单货币对名称3 ="";
input double 特殊跟单单量比例3=1;
input bool 进行尾部价格修饰=false;
input string 限定可做品种模块="------------限定可做品种模块---------";
input bool 限定可做的货币对=false;
input string 限制可做货币对1 ="";
input string 限制可做货币对2 ="";
input string 限制可做货币对3 ="";
input string 限制可做货币对4 ="";
input string 限制可做货币对5 ="";
input string 限制可做货币对6 ="";
input string 限制可做货币对7 ="";
input string 限制可做货币对8 ="";
input string 限制可做货币对9 ="";
input string 限制可做货币对10="";
string 限制可做货币对[100];
input string 限定不可做品种模块="----------限定不可做品种模块-----------";
input bool 限定不可做的货币对=false;
input string 限制不可做货币对1="";
input string 限制不可做货币对2="";
input string 限制不可做货币对3="";
input string 限制不可做货币对4="";
input string 限制不可做货币对5="";
input string 限制不可做货币对6="";
input string 限制不可做货币对7="";
input string 限制不可做货币对8="";
input string 限制不可做货币对9="";
input string 限制不可做货币对10="";
string 限制不可做货币对[100];
input string 跟单魔术码="----------跟单魔术码-----------";
bool 是否显示文字标签=true;
input int magic=666;
string comm11="---------------------";
int X=20;
int Y=20;
int Y间隔=15;
color 标签颜色1=Red;
color 标签颜色2=Green;
int 标签字体大小=10;
ENUM_BASE_CORNER 固定角=0;
int OrderTicketX[200];
string OrderSymbolX[200];
int OrderTypeX[200];
double OrderLotsX[200];
double OrderStopLossX[200];
double OrderTakeProfitX[200];
string OrderCommentX[200];
int OrderMagicNumberX[200];
datetime OrderOpenTimeX[200];
double OrderOpenPriceX[200];
int OrderTicketXH[200];
string OrderSymbolXH[200];
int OrderTypeXH[200];
double OrderLotsXH[200];
double OrderStopLossXH[200];
double OrderTakeProfitXH[200];
string OrderCommentXH[200];
int OrderMagicNumberXH[200];
datetime OrderOpenTimeXH[200];
double OrderOpenPriceXH[200];
double 每点价值[200];
double 滑点=300;
int check;
datetime 过期时间=D'2030.12.1';//时间限制
//===========================================================================
int OnInit()
{
限制可做货币对 [1]=限制可做货币对1;
限制可做货币对 [2]=限制可做货币对2;
限制可做货币对 [3]=限制可做货币对3;
限制可做货币对 [4]=限制可做货币对4;
限制可做货币对 [5]=限制可做货币对5;
限制可做货币对 [6]=限制可做货币对6;
限制可做货币对 [7]=限制可做货币对7;
限制可做货币对 [8]=限制可做货币对8;
限制可做货币对 [9]=限制可做货币对9;
限制可做货币对[10]=限制可做货币对10;
限制不可做货币对[1]=限制不可做货币对1;
限制不可做货币对[2]=限制不可做货币对2;
限制不可做货币对[3]=限制不可做货币对3;
限制不可做货币对[4]=限制不可做货币对4;
限制不可做货币对[5]=限制不可做货币对5;
限制不可做货币对[6]=限制不可做货币对6;
限制不可做货币对[7]=限制不可做货币对7;
限制不可做货币对[8]=限制不可做货币对8;
限制不可做货币对[9]=限制不可做货币对9;
限制不可做货币对[10]=限制不可做货币对10;
for(int ix=0; ix<200; ix++)
{
OrderSymbolX[ix]="";
OrderCommentX[ix]="";
OrderSymbolXH[ix]="";
OrderCommentXH[ix]="";
}
if(IsDllsAllowed()==false)
Alert("请允许调用动态链接库");
OnTick();
return(INIT_SUCCEEDED);
}
//===========================================================================
void OnDeinit(const int reason)
{
for(int i=ObjectsTotal(); i>=0; i--)
{
if(StringFind(ObjectName(i),"标签",0)==0)
{
ObjectDelete(ObjectName(i));
i=ObjectsTotal();
}
}
ObjectsDeleteAll();
Comment("");
}
//===========================================================================
void OnTick()
{
if(TimeCurrent()>过期时间)
{
Alert("软件到使用期限,请续费");
return;
}
if(IsTradeAllowed()==false)
{
Comment("不允许智能交易");
return;
}
if(IsDllsAllowed()==false)
return;
if(中转路径=="")
{
CreateDirectoryW("C:\\量化混沌编程跟单软件中转路径",0);
中转路径2="C:\\量化混沌编程跟单软件中转路径";
}
else
中转路径2=中转路径;
while(true)
{
RefreshRates();
ChartRedraw();
/*
按钮("强制补充已平和未跟单据",180,30,160,20,CORNER_RIGHT_LOWER,clrOrangeRed,clrBlack);
if(ObjectGetInteger(0,"强制补充已平和未跟单据",OBJPROP_STATE)==1)
强制补充已平和未跟单据=true;
else
强制补充已平和未跟单据=false;
*/
提取信号();
提取历史信号();
/*
ObjectSetInteger(0,"强制补充已平和未跟单据",OBJPROP_STATE,0);
按钮("获利达到全平 大于",180,90,100,20,CORNER_RIGHT_LOWER,clrSpringGreen,clrBlack);
EDIT标签("获利达到全平 大于-2","100000",80,90,60,20,CORNER_RIGHT_LOWER,clrWhite,clrBlack);
if(ObjectGetInteger(0,"获利达到全平 大于",OBJPROP_STATE)==1)
if(AccountProfit()>StrToDouble(ObjectGetString(0,"获利达到全平 大于-2",OBJPROP_TEXT)))
{
deleteorder(-100,-1,"");
ObjectSetInteger(0,"获利达到全平 大于",OBJPROP_STATE,0);
}
按钮("亏损达到全平 小于",180,60,100,20,CORNER_RIGHT_LOWER,clrRed,clrBlack);
EDIT标签("亏损达到全平 小于-2","-100000",80,60,60,20,CORNER_RIGHT_LOWER,clrWhite,clrBlack);
if(ObjectGetInteger(0,"亏损达到全平 小于",OBJPROP_STATE)==1)
if(AccountProfit()<StrToDouble(ObjectGetString(0,"亏损达到全平 小于-2",OBJPROP_TEXT)))
{
deleteorder(-100,-1,"");
ObjectSetInteger(0,"亏损达到全平 小于",OBJPROP_STATE,0);
}
*/
for(int ix=GlobalVariablesTotal(); ix>=0; ix--)
{
int 订单号监测=GlobalVariableGet(GlobalVariableName(ix));
if(OrderSelect(订单号监测,SELECT_BY_TICKET,MODE_HISTORY))
if(OrderCloseTime()!=0)
if(TimeCurrent()-OrderCloseTime()>=24*60*60)
GlobalVariableDel(GlobalVariableName(ix));
}
string 内容[100];
内容[0]="----------量化混沌编程本地跟单软件接收端-------------";
内容[1]=" --------------已开启本地跟单接收端--------------";
/*
内容[2]="历史0:"+OrderTicketXH[0]+" "+OrderSymbolXH[0]+" "+OrderTypeXH[0]+" "+OrderLotsXH[0];
内容[3]="历史1:"+OrderTicketXH[1]+" "+OrderSymbolXH[1]+" "+OrderTypeXH[1]+" "+OrderLotsXH[1];
内容[4]="历史2:"+OrderTicketXH[2]+" "+OrderSymbolXH[2]+" "+OrderTypeXH[2]+" "+OrderLotsXH[2];
内容[5]="历史3:"+OrderTicketXH[3]+" "+OrderSymbolXH[3]+" "+OrderTypeXH[3]+" "+OrderLotsXH[3];
内容[6]="历史4:"+OrderTicketXH[4]+" "+OrderSymbolXH[4]+" "+OrderTypeXH[4]+" "+OrderLotsXH[4];
内容[7]="历史5:"+OrderTicketXH[5]+" "+OrderSymbolXH[5]+" "+OrderTypeXH[5]+" "+OrderLotsXH[5];
内容[8]="历史6:"+OrderTicketXH[6]+" "+OrderSymbolXH[6]+" "+OrderTypeXH[6]+" "+OrderLotsXH[6];
内容[9]="";
内容[10]="持有0:"+OrderTicketX[0]+" "+OrderSymbolX[0]+" "+OrderTypeX[0]+" "+OrderLotsX[0]+" 对应"+已跟单对应记录(OrderTicketX[0])+" 时间"+TimeToStr(OrderOpenTimeX[0]);
内容[11]="持有1:"+OrderTicketX[1]+" "+OrderSymbolX[1]+" "+OrderTypeX[1]+" "+OrderLotsX[1]+" 对应"+已跟单对应记录(OrderTicketX[1])+" 时间"+TimeToStr(OrderOpenTimeX[1]);
内容[12]="持有2:"+OrderTicketX[2]+" "+OrderSymbolX[2]+" "+OrderTypeX[2]+" "+OrderLotsX[2]+" 对应"+已跟单对应记录(OrderTicketX[2])+" 时间"+TimeToStr(OrderOpenTimeX[2]);
内容[13]="持有3:"+OrderTicketX[3]+" "+OrderSymbolX[3]+" "+OrderTypeX[3]+" "+OrderLotsX[3]+" 对应"+已跟单对应记录(OrderTicketX[3])+" 时间"+TimeToStr(OrderOpenTimeX[3]);
内容[14]="持有4:"+OrderTicketX[4]+" "+OrderSymbolX[4]+" "+OrderTypeX[4]+" "+OrderLotsX[4]+" 对应"+已跟单对应记录(OrderTicketX[4])+" 时间"+TimeToStr(OrderOpenTimeX[4]);
内容[15]="持有5:"+OrderTicketX[5]+" "+OrderSymbolX[5]+" "+OrderTypeX[5]+" "+OrderLotsX[5]+" 对应"+已跟单对应记录(OrderTicketX[5])+" 时间"+TimeToStr(OrderOpenTimeX[5]);
内容[16]="持有6:"+OrderTicketX[6]+" "+OrderSymbolX[6]+" "+OrderTypeX[6]+" "+OrderLotsX[6]+" 对应"+已跟单对应记录(OrderTicketX[6])+" 时间"+TimeToStr(OrderOpenTimeX[6]);
for(int ixx=0; ixx<=16; ixx++)
固定位置标签("标签"+ixx,内容[ixx],X,Y+Y间隔*ixx,标签颜色,标签字体大小,固定角);
*/
固定位置标签("标签"+0,内容[0],X,Y+Y间隔*0,标签颜色1,标签字体大小,固定角);
固定位置标签("标签"+1,内容[1],X,Y+Y间隔*1,标签颜色1,标签字体大小,固定角);
ChartRedraw();
if(!(!IsStopped() && IsExpertEnabled() && IsTesting()==false && IsOptimization()==false))
return;
Sleep(300);
}
return;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void 固定位置标签(string 名称,string 内容,int XX,int YX,color C,int 字体大小,int 固定角内)
{
if(内容==EMPTY)
return;
if(ObjectFind(名称)==-1)
{
ObjectDelete(名称);
ObjectCreate(名称,OBJ_LABEL,0,0,0);
}
ObjectSet(名称,OBJPROP_XDISTANCE,XX);
ObjectSet(名称,OBJPROP_YDISTANCE,YX);
ObjectSetText(名称,内容,字体大小,"宋体",C);
ObjectSet(名称,OBJPROP_CORNER,固定角内);
ObjectSetInteger(0,名称,OBJPROP_ANCHOR,ANCHOR_LEFT);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
//---
OnTick();
}
//+------------------------------------------------------------------+
void EDIT标签(string name,string 内容,int XX,int YX,int XL,int YL,int WZ,color A,color B)
{
if(ObjectFind(0,name)==-1)
{
ObjectCreate(0,name,OBJ_EDIT,0,0,0);
ObjectSetString(0,name,OBJPROP_TEXT,内容);
ObjectSetInteger(0,name,OBJPROP_XDISTANCE,XX);
ObjectSetInteger(0,name,OBJPROP_YDISTANCE,YX);
ObjectSetInteger(0,name,OBJPROP_XSIZE,XL);
ObjectSetInteger(0,name,OBJPROP_YSIZE,YL);
ObjectSetString(0,name,OBJPROP_FONT,"微软雅黑");
ObjectSetInteger(0,name,OBJPROP_FONTSIZE,8);
ObjectSetInteger(0,name,OBJPROP_CORNER,WZ);
ObjectSetInteger(0,name,OBJPROP_BGCOLOR,A);
ObjectSetInteger(0,name,OBJPROP_COLOR,B);
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void 按钮(string name,int XX,int YX,int XL,int YL,int WZ,color A,color B)
{
if(ObjectFind(0,name)==-1)
{
ObjectCreate(0,name,OBJ_BUTTON,0,0,0);
ObjectSetInteger(0,name,OBJPROP_XDISTANCE,XX);
ObjectSetInteger(0,name,OBJPROP_YDISTANCE,YX);
ObjectSetInteger(0,name,OBJPROP_XSIZE,XL);
ObjectSetInteger(0,name,OBJPROP_YSIZE,YL);
ObjectSetString(0,name,OBJPROP_TEXT,name);
ObjectSetString(0,name,OBJPROP_FONT,"微软雅黑");
ObjectSetInteger(0,name,OBJPROP_FONTSIZE,8);
ObjectSetInteger(0,name,OBJPROP_CORNER,WZ);
}
if(ObjectGetInteger(0,name,OBJPROP_STATE)==1)
{
ObjectSetInteger(0,name,OBJPROP_COLOR,A);
ObjectSetInteger(0,name,OBJPROP_BGCOLOR,B);
}
else
{
ObjectSetInteger(0,name,OBJPROP_COLOR,B);
ObjectSetInteger(0,name,OBJPROP_BGCOLOR,A);
}
}