当前位置: 首页 > news >正文

聊城冠县网站建设/三叶草gw9356

聊城冠县网站建设,三叶草gw9356,专注高密网站建设,模板建站难度大MT4量化交易实战 1.一些基本概念 k线 外汇EA,是外汇智能交易系统的简称(Expert Advisor)。外汇EA是一套用于MT4平台(Metatrader4)的程序化交易系统,可以自动完成外汇交易的操作,无需任何人工的干预。手数,在外汇货币交易中&…

MT4量化交易实战

1.一些基本概念

  • k线

image-20210825162938145

  • 外汇EA,是外汇智能交易系统的简称(Expert Advisor)。外汇EA是一套用于MT4平台(Metatrader4)的程序化交易系统,可以自动完成外汇交易的操作,无需任何人工的干预。
  • 手数,在外汇货币交易中,“手”是基本操作单位,一手=10万美金。
  • 开仓价是成本价,平仓价是处理单子的价格。
  • 买入是以市价买 挂单是以自己认为的价格买 价格可以一样也可以不一样
  • 多单: 看涨,买入
  • 空单:看跌,抛出
  • 一个完整系统的要素

image-20210823132234834

2.交易中常用的MQL4代码片段

  • Bid是卖价,Ask是买价

1.OrderSend(下单)

int  OrderSend(     返回值,当成功的时候会返回订单号,失败的时候返回-1string   symbol, // symbol    交易类型,例如是英镑还是美元。假如多个货币使用同一个ea,可以使用Symbol()来自动获取当前货币类型int      cmd,                 // operation    double   volume,              // volume   做几手double   price,               // price    买的价格int      slippage,            // slippage   滑几个点成交double   stoploss,            // stop loss   止损double   takeprofit,          // take profit   止盈string   comment=NULL,        // comment  注释int      magic=0,             // magic number  魔术数,相当于id,区分不同的ea datetime expiration=0,        // pending order expiration    过期时间,到达指定时间时,订单还没有成交,就会被撤掉color    arrow_color=clrNONE  // color    颜色);
  • 第二个参数的含义 cmd

image-20210823143412485

  • slippage 简单点来说就是价格后边的小数点位数。因为小数点的位数是不确定的,所以可以用 Point() 来获取当前货币的小数点位数

image-20210823144127401

2.修改订单

修改订单之前需要先选择一个订单

bool  OrderSelect(           int     index,            // index or order ticket   根据索引或者订单号选择订单int     select,           // flag int     pool=MODE_TRADES  // mode );
  • 第二个参数

SELECT_BY_POS - index in the order pool 如果是根据索引,就填这个
SELECT_BY_TICKET - index is order ticket. 如果是根据订单号,就填这个

  • 第三个参数

MODE_TRADES 从当前订单中选择
MODE_HISTORY 从历史订单中选择

修改订单

bool  OrderModify( int        ticket,      // ticket   订单号double     price,       // price    开仓价double     stoploss,    // stop loss  止损double     takeprofit,  // take profit   止盈datetime   expiration,  // expiration 截止时间color      arrow_color  // color  颜色);

3.平仓和部分平仓

  • 注意:平仓的时候要从后往前平

平仓

  • 多单和空单
bool  OrderClose( int        ticket,      // ticket  订单号double     lots,        // volume   手数double     price,       // close price   平仓价int        slippage,    // slippage   滑动点数color      arrow_color  // color  颜色);
  • 挂单
bool  OrderDelete( int        ticket,      // ticket color      arrow_color  // color );

部分平仓

只要修改手数即可。注意:部分平仓之后会生成一个新订单,订单号会改变。

4.文件操作

  1. 删除 #property strict
  2. 添加 #import “kernel32.dll”
  3. 使用 FileOpen 函数
int  FileOpen(    // >0 说明打开成功string  file_name,           // File name 文件名int     open_flags,          // Combination of flags   文件打开类型和权限相关的操作,如果使用多个,可以用 | 分割short   delimiter=';',       // Delimiter    以什么分割,可以是 , * 之类uint    codepage=CP_ACP      // Code page );
  • 第二个参数可填类型
FILE_READ        file is opened for reading
FILE_WRITE       file is opened for writing
FILE_BIN         binary read-write mode (no conversion from a string and to a string)
FILE_CSV        
FILE_TXT         
FILE_ANSI       
FILE_UNICODE        
FILE_SHARE_READ         shared reading from several programs
FILE_SHARE_WRITE        shared writing from several programs
FILE_COMMON            
  1. FileWrite函数
uint  FileWrite( int  file_handle,   // File handle    打开文件返回的值...                 // List of recorded parameters   写入的内容);
  1. FileRead 有多种类型,如图所示。用法都一样。

image-20210823165950590

string  FileReadString( int  file_handle,     // File handle int  length=0         // Length of the string );
  1. 拷贝文件
//调用kernel32.dll,导入两个方法
int CopyFileW(string a0,string a1,int a2);  //参数含义: 要拷贝文件的路径,存放路径,a2=0
bool CreateDirectoryW(string a0,int a1);   // a1=0
//获取数据文件存放路径
string dataPath = TerminalInfoString(TERMINAL_DATA_PATH)+"\\MAL4\\Files";

5.获取均线价格

double  iMA( string       symbol,           // symbol    产品类型,NULL代表当前产品int          timeframe,        // timeframe   产品周期,0代表当前周期int          ma_period,        // MA averaging period  均线周期,自己设置的int          ma_shift,         // MA shift   偏移int          ma_method,        // averaging method  均线类型int          applied_price,    // applied price  应用价格int          shift             // shift  偏移量);

3.趋势交易系统

  • ma.mq4
//+------------------------------------------------------------------+
//|                                                           ma.mq4 |
//|                                                             dzsq |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "dzsq"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strictextern int longMa=20;   //长均线
extern int shortMa=10;  //短均线
extern int callBachMa=30;extern int stop = 300; //止损
extern int limit = 900; //止盈
extern double lots=1;  //手数
extern double movestop = 500; //移动止损
extern int magic = 12345;bool isCrossBuy = false; //是否交叉
bool isCrossSell = false;
//是否会调到支撑线
bool isSellCallback = false;
bool isBuyCallback = false;
//是否开仓
bool isBuyOpened=false;
bool isSellOpened=false;datetime buytime=0;
datetime selltime=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit(){
//---//---return(INIT_SUCCEEDED);}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason){
//---}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick(){   //向下取整//lots = MathFloor(AccountBalance()/10000);//获取所有的均线价格,长期,短期,回调double longmaPrice1 = iMA(NULL,0,longMa,0,MODE_SMA,PRICE_CLOSE,1);double longmaPrice2 = iMA(NULL,0,longMa,0,MODE_SMA,PRICE_CLOSE,2);double shortmaPrice1 = iMA(NULL,0,shortMa,0,MODE_SMA,PRICE_CLOSE,1);double shortmaPrice2 = iMA(NULL,0,shortMa,0,MODE_SMA,PRICE_CLOSE,2);double  callBackPrice = iMA(NULL,0,callBachMa,0,MODE_SMA,PRICE_CLOSE,0);//均线交叉多头if (shortmaPrice1>longmaPrice1 && shortmaPrice2<longmaPrice2){isCrossBuy = true;isCrossSell = false;isSellOpened = false;isSellCallback = false;closesell(Symbol()+"sell",magic);}//均线交叉空头if (shortmaPrice1<longmaPrice1 && shortmaPrice2>longmaPrice2){isCrossBuy = false;isCrossSell = true;isBuyOpened = false;isBuyCallback = false;closebuy(Symbol()+"buy",magic);}double lowPrice = Low[0];double highPrice = High[0];double openPrice = Open[0];double closePrice = Close[0];//符合做多的条件if(!isBuyOpened && isCrossBuy && lowPrice < callBackPrice){//time[0]  表示当前时间if (buytime!=Time[0]){   //解决当前K线重复下单的问题if ( buy(lots,stop,limit,Symbol()+"buy",magic)){buytime=Time[0];isBuyOpened = true;}} }//符合做空的条件if(!isSellOpened && isCrossSell && highPrice > callBackPrice){//time[0]  表示当前时间if (selltime!=Time[0]){   //解决当前K线重复下单的问题if (sell(lots,stop,limit,Symbol()+"sell",magic)){selltime=Time[0];isSellOpened = true;}} }yidongzhisun();}//下单函数 针对一个单子int buy(double lots,double stop , double limit,string comm,int buymagic){  //手数,止损,止盈,注释,magicint ticket=0;   //订单号bool zhaodan = false;  //判断有没有重复下单,其实上面已经写过了,这里不写也没关系for (int i=0; i < OrdersTotal(); i++){if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true){string zhushi = OrderComment();int magicNumber = OrderMagicNumber();if (OrderSymbol()==Symbol() && OrderType()==OP_BUY && zhushi==comm && magicNumber==buymagic){zhaodan = true;break;}}}if (zhaodan==false){if (stop!=0 && limit==0){ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,50,Ask-stop*Point,0,comm,buymagic,0,White);}if (stop==0 &&limit!=0)ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,50,0,Ask+limit*Point,comm,buymagic,0,White);if (stop==0 &&limit==0)ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,50,0,0,comm,buymagic,0,White);if (stop!=0 &&limit!=0)ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,50,Ask-stop*Point,Ask+limit*Point,comm,buymagic,0,White);}return (ticket);}//下单函数 针对一个单子int sell(double lots,double stop , double limit,string comm,int sellmagic){  //手数,止损,止盈,注释,magicint ticket=0;   //订单号bool zhaodan = false;  //判断有没有重复下单,其实上面已经写过了,这里不写也没关系for (int i=0; i < OrdersTotal(); i++){if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true){string zhushi = OrderComment();int magicNumber = OrderMagicNumber();if (OrderSymbol()==Symbol() && OrderType()==OP_SELL && zhushi==comm && magicNumber==sellmagic){zhaodan = true;break;}}}if (zhaodan==false){if (stop!=0 && limit==0){ticket = OrderSend(Symbol(),OP_SELL,lots,Bid,50,Bid+stop*Point,0,comm,sellmagic,0,White);}if (stop==0 &&limit!=0)ticket = OrderSend(Symbol(),OP_SELL,lots,Bid,50,0,Bid-limit*Point,comm,sellmagic,0,White);if (stop==0 &&limit==0)ticket = OrderSend(Symbol(),OP_SELL,lots,Bid,50,0,0,comm,sellmagic,0,White);if (stop!=0 &&limit!=0)ticket = OrderSend(Symbol(),OP_SELL,lots,Bid,50,Bid+stop*Point,Bid-limit*Point,comm,sellmagic,0,White);}return (ticket);}// 平货币void closebuy(string comm,int magic){for (int i=OrdersTotal()-1; i >=0; i--){if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true){if (OrderSymbol()==Symbol() && OrderType() == OP_BUY && OrderComment() == comm && OrderMagicNumber() == magic){OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),300,Green);  }}}}// 平货币void closesell(string comm,int magic){for (int i=OrdersTotal()-1; i >=0; i--){if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true){if (OrderSymbol()==Symbol() && OrderType()== OP_SELL && OrderComment() == comm && OrderMagicNumber() == magic){OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),300,Green);  }}}}
//设置移动止损
void yidongzhisun(){for (int i=0; i<OrdersTotal();i++){if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true){if (OrderSymbol()==Symbol() && OrderType() == OP_BUY && OrderMagicNumber() == magic){if ((Bid-OrderOpenPrice())>=Point*movestop){if (OrderStopLoss() <(Bid-Point*movestop) || OrderStopLoss()==0){OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*movestop,OrderTakeProfit(),0,Green);}}}if (OrderSymbol()==Symbol() && OrderType() == OP_SELL && OrderMagicNumber() == magic){if ((OrderOpenPrice()-Ask)>=Point*movestop){if (OrderStopLoss() <(Ask + Point*movestop) || OrderStopLoss()==0){OrderModify(OrderTicket(),OrderOpenPrice(),Ask + Point*movestop,OrderTakeProfit(),0,Green);}}}}}
}//+------------------------------------------------------------------+
http://www.lbrq.cn/news/1356841.html

相关文章:

  • 化州网站建设/网络营销特点
  • 深圳网站建设 贴吧/百度收录快速提交
  • 海口模板建站平台/真实有效的优化排名
  • 重庆市建设工程造价站/网络推广怎么找客户资源
  • 网站建设公司yu/电商网站卷烟订货流程
  • 辽宁做网站和优化哪家好/免费线上培训平台
  • 高端网站制作价格/营销型网站建设企业
  • 自己做的网站只能用谷歌浏览器打开/怎么设置自己的网站
  • 免费的源码分享网站/google下载官网
  • 做芯片代理哪个网站推广/百度竞价推广的技巧
  • 社区微网站建设需求分析/电脑优化
  • 电商的网站/网店营销策划方案范文
  • 苏州做网站公司/杭州推广公司排名
  • 建设检测人员证书查询网站/网络运营培训班
  • 平面设计师网站/seo技术快速网站排名
  • 网站开发培训学院/付费推广
  • 发卡网站怎么做/百度搜索趋势
  • 建设一个下载网站/站长统计app下载免费
  • 低多边形网站/网络营销有哪些特点
  • 网站登录界面模板下载/昆明网络营销公司哪家比较好
  • seo网站诊断书/seo教程视频
  • 响应式网站定制开发/正规软件开发培训学校
  • 杭州网站设计公司电话/广告推广怎么做最有效
  • 外贸营销型网站/每日一则小新闻
  • 做网站用什么浏览器/seo 推广服务
  • asp.net做网站如何展示界面/seo推广策划
  • 网站icp备案证明文件/百度网盘app怎么打开链接
  • 彩票网站开发b9kj/网络营销推广方案论文
  • 广州网站建设怎么样/软文自助发稿平台oem
  • 建设公司网站的内容/网页制作的步骤
  • LinkedList 深度解析:核心原理与实践
  • 信息安全概述
  • 力扣106:从中序与后序遍历序列构造二叉树
  • SELinux加固Linux安全
  • 数据结构(三)双向链表
  • FPGA设计思想与验证方法学系列学习笔记003