EA编程
EA编程
@ if(AccountMargin()>0)保证金比例= Print("保证金比例=",DoubleToStr(AccountEquity()/AccountMargin()*100,2),"% ");@ 测试数据次数过多,目录文件胖到走不到时,就减肥:目录:\ \tester\history和tester\logs里的文件全部删除@如果你下载的是ex4文件,就将它拷贝到experts\indicators目录下,然后重新运行MT4,就可以在导航栏的自定义指标项目下看到新的指标名称,后面的使用和其他指标一样。
如果你下载的是mq4文件,同样你也需要先拷贝的experts\indicators目录下,然后使用MetaEditor打开源文件,点击编写按钮。
这时会在目录下自动生成ex4文件,同时MT4导航栏自定义指标项目下会出现新指标,直接使用即可。
如果还有DLL文件,或者有.set,或者有.tpl等,DLL为库文件,复制到experts\libraries,.set为设置文件复制到experts\presets,.tpl为模板文件,复制到templates@OrdersTotal()函数,可以计算当前账户中一共还没有平仓的单子和挂单的个数@从历史订单选出最后一单int i =0;while (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) )i++;OrderSelect(i-1,SELECT_BY_POS,MODE_HISTORY)现在就是最后一个平仓的!上面的使用条件是没有使用挂单,没有取消过挂单,因为历史中包含平仓的和取消的.如果历史中有取消的挂单,就麻烦多了,需要判断类型/时间/赢利来剔除取消的挂单,找到最后的平仓.@如何检测一张交易单是否已经被打止损或打止盈答9)OrderCloseTime()这个函数返回的是订单的收盘时间。
ea编程方法
ea编程方法
事件驱动分析(Event-Driven Analysis,简称EA)编程方法是一种基于事件和消息传递的编程范式。
在这种方法中,程序的执行流程由一系列事件组成,这些事件之间通过消息进行通信。
EA编程方法广泛应用于实时系统、嵌入式系统以及分布式系统等领域。
EA编程方法的主要特点和优势如下:
1. 高度解耦:事件和消息传递使得不同组件之间的依赖关系降低,易于模块化和独立开发。
2. 响应式:EA编程方法使得程序能够快速响应外部事件,提高了系统的实时性和灵活性。
3. 易于扩展:通过添加新的事件和消息处理逻辑,可以很容易地对系统进行扩展。
4. 低延迟:EA编程方法避免了繁琐的循环和条件判断,降低了延迟。
5. 容错性:由于各组件之间的解耦,系统的某个组件出现故障时,其他组件仍能继续运行,提高了系统的容错性。
在实际应用中,EA编程方法可以与其他编程范式(如面向对象编程、函数式编程等)相结合,以满足不同场景的需求。
总之,EA编程方法为开发人员提供了一种高效、灵活的编程方式,有助于构建高质量的实时系统和分布式系统。
外汇EA编程教程——函数
外汇EA编程教程——函数外汇EA(Expert Advisor)是一种基于计算机算法进行外汇交易决策的自动交易系统。
编程外汇EA需要使用MetaQuotes公司的MetaTrader平台编写代码。
在编写外汇EA时,函数是非常重要的组成部分之一、本篇教程将介绍外汇EA编程中常用的函数及其使用方法。
1. 在编写外汇EA时,首先需要定义init函数。
该函数在EA被加载到图表上时执行一次,用于初始化一些变量及设置一些参数。
例如:```void initint ma_period = 20; // 移动平均线的周期```在init函数中,我们可以定义一些全局变量,并对其进行初始化。
在上述例子中,我们定义了一个整型变量ma_period,并将其赋值为20。
2. 然后,我们需要定义start函数。
该函数在每个价格更新时执行一次。
在该函数中,我们可以编写外汇交易的主要逻辑。
例如:```void startdouble current_price = Ask; // 获取当前的卖出价double ma = iMA(NULL, 0, ma_period, 0, MODE_SMA, PRICE_CLOSE, 0); // 计算移动平均线if(current_price > ma)//当前价格高于移动平均线,执行买入操作OrderSend(Symbol(, OP_BUY, 0.1, current_price, 3,current_price - StopLoss*Point, current_price +TakeProfit*Point);}else if(current_price < ma)//当前价格低于移动平均线,执行卖出操作OrderSend(Symbol(, OP_SELL, 0.1, current_price, 3,current_price + StopLoss*Point, current_price -TakeProfit*Point);}```在上述例子中,我们使用了iMA函数计算移动平均线的值。
EA编程教程大全之账户函数
EA编程教程大全之账户函数账户函数是实现账户管理的关键组成部分,它可以对账户进行增删改查等操作。
本教程将介绍如何使用EA编程创建账户函数。
在EA编程中,可以使用MQL4或MQL5语言来编写账户函数。
下面以MQL5为例,介绍如何编写一个简单的账户函数来管理账户信息。
1.创建账户函数模板首先,我们需要创建一个账户函数的模板,它包含了基本的账户信息和操作函数。
可以创建一个新的MQL5脚本,然后在脚本中添加如下代码:```mql5struct Accountdouble balance;double equity;double margin;};void InitAccount(Account &account)account.balance = AccountInfoDouble(ACCOUNT_BALANCE);account.equity = AccountInfoDouble(ACCOUNT_EQUITY);account.margin = AccountInfoDouble(ACCOUNT_MARGIN);void UpdateAccount(Account &account)account.balance = AccountInfoDouble(ACCOUNT_BALANCE);account.equity = AccountInfoDouble(ACCOUNT_EQUITY);account.margin = AccountInfoDouble(ACCOUNT_MARGIN);void PrintAccountInfo(const Account &account)Print("Balance: ", account.balance);Print("Equity: ", account.equity);Print("Margin: ", account.margin);```在上述代码中,我们创建了一个`Account`结构体用于存储账户信息,并定义了`InitAccount`、`UpdateAccount`和`PrintAccountInfo`三个函数来初始化、更新和打印账户信息。
EA编程教程第二讲-数据类型
EA编程教程第⼆讲-数据类型EA编程教程第⼀讲-MQL语法什么是MQL?MetaQuotes Language 4 (MQL4)语⾔是MT4软件为了编写出执⾏交易策略的内置编程语⾔。
我们可以通过编写EA(Expert Advisors)来控制MT4客户端按照我们的预先定义好的交易策略来执⾏外汇交易。
另外,我们可以使⽤mql来编写技术分析指标,脚本和库。
1)MQL的语法MQL的语法与我们平时见到的C语⾔语法极其类似,但仍然有以下不⼀致的地⽅:⼀:没有地址运算符。
⼆:没有do while操作语句三:没有goto语句。
四:没有?::语句。
五:没有结构体。
六:不⽀持复杂的赋值语句,⽐如 val1=val2=0; arr[i++]=val; cond=(cnt=OrdersTotal)>0;这种复杂语句不被⽀持。
2)注释多⾏注释从/*开始并以*/结束。
注释符不能嵌套,只能头尾各⼀个。
单⾏注释符为//,仅注释⼀⾏。
我们写程序的时候要养成注释的习惯,可以让程序更好理解,同时MQL编译器⾃动忽略掉注释的内容。
注释的内容只给我们⼈看,不是给机器看的。
⽐如:// 这个是单⾏注释/* 这个是多⾏注释int i = 0;注释⾥⾯爱写什么都⾏*/3)标识符标识符是程序⾥⾯变量,函数,数据类型的名称,长度不能超过31个字符,标识符可以由数字,⼤⼩写字母a到z和A到Z,下划线(_),其中第⼀个符号不能是数字,并且标识符不能与保留字⼀样。
什么是保留字请看下⽂。
4)保留字保留字是MQL语⾔定义好的单词,每个单词都有这特殊的意义。
保留字如下:数据类型:bool,color,datetime,double,int,string,void存储类型: extern,static操作符:break,case,continue,default,else,for,if,return,switch,while其他:false,true课程简介:什么是MQL?MetaQuotes Language 4 (MQL4)语⾔是MT4软件为了编写出执⾏交易策略的内置编程语⾔。
EA编程教程大全之日期时间函数
EA编程教程大全之日期时间函数日期时间函数在编程中非常常用,可以用于获取当前时间、格式化时间、日期的加减运算等功能。
下面是关于日期时间函数的一些常用知识点和实例代码。
1.获取当前时间获取当前时间是程序中一项常用任务,可以使用date函数来实现。
date函数可以返回当前系统时间的多种格式。
常见的格式化字符串参数包括:"Y-m-d H:i:s"(年-月-日时:分:秒)、"Y/m/d H:i:s"(年/月/日时:分:秒)、"Y年m月d日 H时i分s秒"(年月日时分秒)等。
```python```输出结果可能为:2024-05-0614:30:452.时间的加减运算```pythonafter_1_hour = now + delta```输出结果可能为:2024-05-0615:30:453.将字符串转换为时间对象```pythondate_string = "2024-01-01 12:00:00"print(date_object)```输出结果可能为:2024-01-0112:00:004.将时间对象转换为字符串```pythonprint(date_string)```输出结果可能为:2024-05-0614:30:455.获取指定日期的星期几有时需要知道一些日期是星期几,可以使用weekday函数来实现。
weekday函数返回的是一个整数,0代表星期一,1代表星期二,依次类推。
```pythondate_string = "2024-05-06"weekday = date_object.weekdayprint(weekday)```输出结果为:"4",表示星期五总结:。
MT4MT5外汇EA编程教程大全之数组函数
MT4MT5外汇EA编程教程大全之数组函数数组函数是MetaTrader 4(MT4)和MetaTrader 5(MT5)外汇交易平台中非常重要的一部分。
在编写外汇自动交易程序(EA)时,数组函数能帮助您进行数据的存储、处理和分析。
本篇教程将介绍一些常用的数组函数及其用法。
1. ArrayCopy:这个函数用于将一个数组的数据复制到另一个数组。
它有四个参数,分别是源数组、目标数组、源数组起始位置和目标数组起始位置。
下面是一个例子:```double sourceArray[10];double targetArray[10];ArrayCopy(sourceArray, targetArray, 0, 0);```2. ArrayInitialize:这个函数用于给数组的所有元素赋予一个初始值。
它有两个参数,分别是目标数组和初始值。
下面是一个例子:```double array[10];ArrayInitialize(array, 0);```3. ArrayRange:这个函数用于获取数组的一个子范围。
它有三个参数,分别是源数组、起始索引和结束索引。
下面是一个例子:```double sourceArray[10];double targetArray[5];ArrayRange(sourceArray, 0, 4, targetArray);```4. ArraySetAsSeries:这个函数用于将数组从头到尾翻转。
它有一个参数,即目标数组。
下面是一个例子:```double array[10];ArraySetAsSeries(array, true);```5. ArraySize:这个函数用于获取数组的长度。
它只有一个参数,即目标数组。
下面是一个例子:```double array[10];int size = ArraySize(array);```6. CopyBuffer:这个函数用于将指标缓冲区的数据复制到一个数组中。
EA编程教程大全之常用函数
EA编程教程大全之常用函数总结常用函数,主要分为以下几个方面:1.字符串处理函数1.1 strlen函数:用于计算字符串的长度。
1.2 strcpy函数:用于将一个字符串复制给另一个字符串。
1.3 strcat函数:用于将两个字符串进行连接。
1.4 strcmp函数:用于比较两个字符串的大小。
1.5 strncpy函数:用于将一个字符串的前n个字符复制给另一个字符串。
2.数学函数2.1 abs函数:用于计算一个数的绝对值。
2.2 pow函数:用于计算一个数的幂。
2.3 sqrt函数:用于计算一个数的平方根。
2.4 sin函数:用于计算一个角度的正弦值。
2.5 cos函数:用于计算一个角度的余弦值。
3.时间处理函数4.文件处理函数4.1 fopen函数:用于打开一个文件。
4.2 fclose函数:用于关闭一个文件。
4.3 fgets函数:用于从文件中读取一行数据。
4.4 fputs函数:用于将一行数据写入文件。
4.5 fseek函数:用于在文件中定位位置。
5.随机数函数5.1 srand函数:用于设置随机数种子。
5.2 rand函数:用于生成一个随机数。
6.数组处理函数6.1 memcpy函数:用于将一个数组的内容复制给另一个数组。
6.2 memmove函数:用于将一个数组的内容移动到另一个数组。
6.3 memset函数:用于将一个数组的内容设置为指定的值。
6.4 memcmp函数:用于比较两个数组的内容。
7.输入输出函数7.1 printf函数:用于将数据输出到标准输出设备。
7.2 scanf函数:用于从标准输入设备中读取数据。
7.3 fprintf函数:用于将数据输出到文件。
7.4 fscanf函数:用于从文件中读取数据。
EA编程教程大全之交易函数
EA编程教程大全之交易函数从自定义指标中不能调用OrderSend(), OrderClose, OrderCloseBy, OrderDelete和OrderModify 交易函数。
OrderCloseOrderCloseByOrderClosePriceOrderCloseTimeOrderCommentOrderCommissionOrderDeleteOrderExpirationOrderLotsOrderMagicNumberOrderModifyOrderOpenPriceOrderOpenTimeOrderPrintOrderProfitOrderSelectOrderSendOrdersHistoryTotalOrderStopLossOrdersTotalOrderSwapOrderSymbolOrderTakeProfitOrderTicketOrderTypebool OrderClose( int ticket, double lots, double price, int slippage, void Color)对定单进行平仓操作。
如果函数成功,返回的值是真实的。
如果函数失败,返回的值是假的。
获得详细错误信息,请查看GetLastError()函数。
参量:ticket - 定单编号。
lots - 手数。
price - 收盘价格。
slippage - 最高划点数。
Color - 图表中标记颜色。
如果参量丢失,CLR_NONE值将不会在图表中画出。
示例:if(iRSI(NULL,0,14,PRICE_CLOSE,0)>75){OrderClose(order_id,1,Ask,3,Red);return(0);}bool OrderCloseBy( int ticket, int opposite, void Color)用相反定单对打开仓位进行平仓操作。
如果函数成功,返回的值是真实的。
EA编程
第一课::EA的结构了解EA的形式以下就是EA的编写形式//+------------------------------------------------------------------+//| MT4-EA制作速成班.mq4 |//| Copyright ?2007, MetaQuotes Software Corp. |//| |//+------------------------------------------------------------------+#property copyright "Copyright ?2007, MetaQuotes Software Corp." #property link ""//+------------------------------------------------------------------+//| expert initialization function |//+------------------------------------------------------------------+int init(){//----//----return(0);}//+------------------------------------------------------------------+//| expert deinitialization function |//+------------------------------------------------------------------+int deinit(){//----//----return(0);}//+------------------------------------------------------------------+//| expert start function |//+------------------------------------------------------------------+int start(){//----//----return(0);}//+------------------------------------------------------------------+//+------------------------------------------------------------------+//| MT4-EA制作速成班.mq4 |//| Copyright ?2007, MetaQuotes Software Corp. |//| |//+------------------------------------------------------------------+这个是在上面的垃圾写与不写都无所谓我们就不用理他#property copyright "Copyright ?2007, MetaQuotes Software Corp."#property link 这个也是在上面的垃圾写与不写都无所谓我们也不用理他//+------------------------------------------------------------------+//| expert initialization function |//+------------------------------------------------------------------+int init(){//----//以后可能有用到//----return(0);}//+------------------------------------------------------------------+//| expert deinitialization function |//+------------------------------------------------------------------+int deinit(){//----//以后可能有用到//----return(0);}这两个很少用到。
EA编程教程第三讲-数据类型转换
EA编程教程第三讲-数据类型转换MQL语言目前仅支持隐式转换,MQL目前可以做一下数据类型自动转换。
int(bool, color, datetime) 可转换成 double 或 stringdouble 可转换成 string,除了以上两种转换外,不能进行其他的数据类型转换,如:int i = 1 / 2; //不进行数据转换,注意结果为0,而不是0.5,因为分子和分母都是整形,就不进行转换。
int i = 1 / 2.0; //表达式已经转换成double类型了,算出来的结果为0.5,但是由于变量i定义为int型,所以取整部分0,最终结果还是整数0。
double d = 1.0 / 1.0; //没有任何转换,结果就是0.5。
double d = 1 / 2.0; //由于分母是double型,所以分子会被转换成double型,也就是1.0,所以这个表达式的结果为0.5。
double d = 1 / 2; //由于分子和分母都是整形,所以计算出来的结果是整型0,目标d的类型为double,所以最终结果由整型0转换为double型0.0string s = 1.0 / 8; //由于分子和分母中有一个为double,则分子和分母中非double 都会转成double型,表达式的结果为0.12500000,由于目标类型为字符串,所有最终的结果为string型,值为"0.12500000",注意值的前后有个双引号。
string s = NULL; //结果为"0",注意NULL的值就是0string s = "abc" + 123; //结果为"abc123",123原本为整形,被转换成string型。
注意string类型不能隐式转换成int和double,所以一下表达式都是错误的。
int i = "abc";如果是字符串"123"要转换成整型123,需要使用函数进行转换,这个函数将在后续的课程中提到。
MT4MT5外汇EA编程教程大全之日期时间函数
MT4MT5外汇EA编程教程大全之日期时间函数1、Time函数Time函数用于获取当前服务器时间,即GMT时间,这是一个用于时间基衡的,与你的本地时间相差一个时差的时间。
Time函数的语法格式:返回值类型:long,即整数类型,以秒为单位Time函数实例://取得GMT时间long lGMTTime = Time(;2、TimeLocal函数TimeLocal函数用于取得当前本地时间。
TimeLocal函数的语法格式:TimeLocal()返回值类型:long,即整数类型,以秒为单位TimeLocal函数实例://取得本地时间long lLocalTime = TimeLocal(;3、TimeCurrent函数TimeCurrent函数用于取得当前的服务器时间或本地时间等,它可以获取的参数与该函数的返回值规格一样(可选参数TimeLocal(/TimeGMT(/TimeCurrent()。
TimeCurrent函数的语法格式:TimeCurrent([可选参数])返回值类型:long,即整数类型,以秒为单位TimeCurrent函数实例://取得当前时间long lCurrentTime = TimeCurrent(;4、TimeDay函数TimeDay函数用于取得当日的服务器时间,此时间是单经过的秒数,而不是从零点开始的秒数。
TimeDay函数的语法格式:TimeDay([可选参数])返回值类型:long,即整数类型,以秒为单位TimeDay函数实例://取得其中一日的当前时间long lNowTime = TimeDay(;5、TimeWeek函数TimeWeek函数可以取得当前服务器时间的星期几,以数字形式输出,星期一为1,星期日为7TimeWeek函数的语法格式:TimeWeek()返回值类型:int,以数字表示TimeWeek函数实例:。
EA编程教程大全之常用函数
EA编程教程大全之常用函数对于每个执行的MQL4程序,一定数量的变量设定可以轻松应对图表中的价格状态:智能交易,脚本或者是客户指标。
.资料应用到可变量的模型中来。
可以由预定义的变量分开处理。
这些数据会在开启后应用RefreshRates()函数更新。
AskBarsBidCloseDigitsHighLowOpenPointTimeVolumeAskdouble Ask对于当前货币对的最新卖价格。
使用RefreshRates()函数更新。
参见MarketInfo().示例:if(iRSI(NULL,0,14,PRICE_CLOSE,0)<25){OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point, "My order #2",3,D'2005.10.10 12:30',Red);return;}Barsint Bars返回图表中的柱数。
参见iBars().示例:int counter=1;for(int i=1; i<=Bars; i++){Print(关闭[i-1]);}Biddouble Bid对于当前货币对的最新买价格。
使用RefreshRates()函数更新。
参见MarketInfo().示例:if(iRSI(NULL,0,14,PRICE_CLOSE,0)>75){OrderSend("EURUSD",OP_SELL,Lots,Bid,3,Ask+StopLoss*Point,Bid-TakeProfit*Poin t,"My Order #2",3,D'2005.10.10 12:30',Red);return(0);}Closedouble Close[]系列数组包含当前图表每个柱的收盘价格。
EA编程教程大全之价格函数0
任何可见货币对/时间周期的价格数据的一组函数。
iBarsiBarShiftiCloseiHighiHighestiLowiLowestiOpeniTimeiVolumeint iBars( string symbol, int timeframe)在指定的图表内返回柱的数量。
对于当前图表柱总量的信息在预定义的变量中命名为Bars。
参量:symbol - 需应用到计算指标的货币对数据NULL 意味当前货币对名称。
timeframe - 时间周期。
可以是时间周期列举的任意值。
0 意味着当前图表的时间周期。
示例:Print("在货币对'EUROUSD'带有PERIOD_H1 柱数",iBars("EUROUSD",PERIOD_H1)); int iBarShift( string symbol, int timeframe, datetime time, void exact)搜索柱开始的时间。
函数返回指定开始时间的柱。
如果柱的指定开始时间是省缺值,函数将返回-1或最近的柱exact。
参量:symbol - 需应用到计算指标的货币对数据NULL 意味当前货币对名称。
timeframe - 时间周期。
可以是时间周期列举的任意值。
0 意味着当前图表的时间周期。
time - 查找值(柱的开始时间)。
exact - 未发现柱的返回模式。
false - iBarShift 返回最近。
true - iBarShift 返回-1。
示例:datetime some_time=D'2004.03.21 12:00';int shift=iBarShift("EUROUSD",PERIOD_M1,some_time);Print("带有打开时间平移柱",TimeToStr(some_time)," 是",shift);double iClose( string symbol, int timeframe, int shift)对于带有时间周期和平移指定货币对的柱返回关闭值。
EA编程教程大全之日期时间函数
表示时间类型数据的一组函数(从1970年1月1日午夜开始以秒为单位计算)。
DayDayOfWeekDayOfYearHourMinuteMonthSecondsTimeCurrentTimeDayTimeDayOfWeekTimeDayOfYearTimeHourTimeLocalTimeMinuteTimeMonthTimeSecondsTimeYearYearint Day( )返回这个月的当天,最后一次访问服务器的时间。
注解: 在测试中, 时间格式为最后设定的服务器模式。
示例:if(Day()<5) return(0);int DayOfWeek( )返回这周的星期数,(0-星期天,1,2,3,4,5,6 以此类推)来自最后已知的服务器上的时间。
注解: 在测试中, 时间格式为最后设置的服务器模式。
示例:// 假期不工作if(DayOfWeek()==0 || DayOfWeek()==6) return(0);int DayOfYear( )返回年的当天(1 代表1月1 日.., 365(6) 就是12月31 日),最后访问服务器的时间。
注解: 在测试中, 时间格式为最后已知的服务器模式。
示例:if(DayOfYear()==245)return(true);int Hour( )在程序开始以前的片刻,返回小时数(0,1,2,..23) 最后访问的服务器时间(在程序执行之内的时期这个值不会改变) 。
注解: 在测试中, 时间格式为最后设置的服务器模式。
示例:bool is_siesta=false;if(Hour()>=12 || Hour()<17)is_siesta=true;int Minute( )在程序开始以前的片刻,返回当前的分钟(0,1,2,..59)最后访问的服务器时间(在程序执行期间这个值不会改变) 。
示例:if(Minute()<=15)return("first quarter");int Month( )在程序开始以前的片刻,返回当前的月数(1,2,..12)最后访问的服务器时间(在程序执行期间这个值不会改变) 。
EA智能交易程序编程(一)
EA智能交易程序编程(一)@ 测试数据次数过多,目录文件胖到走不到时,就减肥:目录:\tester\history和tester\logs里的文件全部删除@如果你下载的是ex4文件,就将它拷贝到experts\indicators目录下,然后重新运行MT4,就可以在导航栏的自定义指标项目下看到新的指标名称,后面的使用和其他指标一样。
如果你下载的是mq4文件,同样你也需要先拷贝的experts\indicators目录下,然后使用MetaEditor打开源文件,点击编写按钮。
这时会在目录下自动生成ex4文件,同时MT4导航栏自定义指标项目下会出现新指标,直接使用即可。
如果还有DLL文件,或者有.set,或者有.tpl等,DLL为库文件,复制到experts\libraries,.set为设置文件复制到experts\presets,.tpl为模板文件,复制到templates@OrdersTotal()函数,可以计算当前账户中一共还没有平仓的单子和挂单的个数@从历史订单选出最后一单int i =0;while (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) )i++;OrderSelect(i-1,SELECT_BY_POS,MODE_HISTORY)现在就是最后一个平仓的!上面的使用条件是没有使用挂单,没有取消过挂单,因为历史中包含平仓的和取消的.如果历史中有取消的挂单,就麻烦多了,需要判断类型/时间/赢利来剔除取消的挂单,找到最后的平仓.@如何检测一张交易单是否已经被打止损或打止盈答9)OrderCloseTime()这个函数返回的是订单的收盘时间。
如果订单正在交易中而未平仓,此函数返回的是0,如果平仓,此值就会变成平仓当时的服务器时间,是一个很大的正整数。
//-----------------检测是否平仓-----------------+string IsClosed(int tik){OrderSelect(tik, SELECT_BY_TICKET);//--若为未平仓if(OrderCloseTime()<1)return("未平");//--若为买单被止盈if(OrderType()==OP_BUY){if(OrderClosePrice()>=OrderTakeProfit())return("已被止盈");}//--若为卖单被止盈if(OrderType()==OP_SELL){if(OrderClosePrice()<=OrderTakeProfit())return("已被止盈");}//--其它为被止损return("已被止损");}//------------------------------------------------+有的朋友可能会质疑,打止损或打止盈的订单,其OrderComment()会包含sl或tp字样,检测这个不是更方便吗?你要这样说我完全同意,不过上面的函数也完全可以实现功能,这个例子同时说明编程不是死的,我们可以用不同的方式完成同一件任务。
ea编程k线止盈法
ea编程k线止盈法
K线止盈法是一种常用的股票交易策略,它基于对K线图形态的分析,以判断股票价格即将反转或达到顶部,并在此时选择止盈。
以下是一种常见的K线止盈法的编程实现思路:
1. 获取K线数据:从交易所或其他数据源获取相关股票的K 线数据,包括每根K线的开盘价、最高价、最低价和收盘价等信息。
2. 分析K线图形态:使用技术指标或自定义的规则来分析K 线图形态,判断股票价格是否出现了可能的反转信号或达到了顶部。
3. 设置止盈条件:根据K线的形态分析结果,设置止盈的条件,例如当股票价格超过某一阈值或出现特定的K线形态时触发止盈操作。
4. 执行止盈操作:一旦满足止盈条件,即可执行止盈操作,将持有的股票卖出或进行其他相应的操作。
需要注意的是,K线止盈法是基于过去的历史数据进行判断,不能保证股票价格的未来走势。
因此,在实际应用中,除了编程实现止盈法,还需要考虑其他因素,如风险控制、市场状况等因素。
同时,也建议结合其他交易策略和风险管理方法来进行投资决策。
数控编程G代码和M代码ea
G代码内容G00 快速定位G01 直线插补G02 圆弧插补G03 圆弧插补G04 暂停G05G06G07G08G09G10G11G12G13 刀架选择:刀架AG14 刀架选择:刀架BG15G16G17 刀具半径补偿:X-Y平面G18 刀具半径补偿:Z-X平面G19 刀具半径补偿:Y-Z平面G20 原始位置指令G21 ATC原始位置指令G22 扭距跳过指令G23G24 ATC原始位置移动指令(不带直线插补) G25 节点位置移动指令(不带直线插补)G26G27G28 扭距极限指令取消G29 扭距极限指令G30 跳步循环G31 固定螺纹车削循环:轴向G32 固定螺纹车削循环:端面G33 固定螺纹车削循环G34 变螺距螺纹车削循环:增加螺距G35 变螺距螺纹车削循环:减少螺距G36 动力刀具轴-进给轴同步进给 (正转)G37 动力刀具轴-进给轴同步进给 (反转) G38G39G40 刀尖圆狐半径补偿: 取消G41 刀尖圆狐半径补偿: 左G42 刀尖圆狐半径补偿: 右G43G44G45G46G47G48G49G50 零点位移,主轴最高转速指令G51G52 六角刀架转位位置误差补偿G53G54G55G56G57G58G59G60G61G62 镜像指令G63G64 到位控制关G65 到位控制开G66G67G68G69G70G71 复合固定螺纹车削循环: 轴向G72 复合固定螺纹车削循环: 径向G73 轴向铣槽复合固定循环G74 径向铣槽复合固定循环G75 自动倒角G76 自动倒圆角G77 攻丝复合固定循环G78 反向螺纹攻丝循环G79G80 形状定义结束 (LAP)G81 轴向形状定义开始 (LAP)G82 径向形状定义开始 (LAP)G83 坯材形状定义开始 (LAP)G84 棒料车削循环中改变切削条件 (LAP) G85 调用棒料粗车循环 (LAP)G86 调用重复粗车循环 (LAP)G87 调用精车循环 (LAP)G88 调用连续螺纹车削循环 (LAP)G89G90 绝对值编程G91 增量编程G92G93G94 每分进给模式 (mm/min)G95 每转进给模式 (mm/rev)G96 恒周速切削开G97 G96取消G98G99G100 刀架A或刀架B单独切削的优先指令G101 创成加工中直线插补G102 创成加工中圆弧插补 (正面) (CW)G103 创成加工中圆弧插补 (正面) (CCW) G104G105G106G107 主轴同步攻丝,右旋螺纹G108 主轴同步攻丝,左旋螺纹G109G110 刀架A恒周速切削G111 刀架B恒周速切削G112 圆弧螺纹车削CWG113 圆弧螺纹车削CCWG114G115G116G117G118G119 刀具半径补尝:C-X-Z平面G120G121G122 刀架A副主轴W轴指令 (13)G123 刀架B副主轴W轴指令 (G14)G124 卡盘A有效原点G125 卡盘B有效原点G126 锥度加工模式OFF指令G127 锥度加工模式ON指令G128 M/C加工模式OFF指令G129 M/C加工模式ON指令G130G131G132 创成加工中圆弧插补 (侧面) (CW)G133 创成加工中圆弧插补 (侧面) (CCW)G134G135G136 坐标反转结束或Y轴模式关G137 坐标反转开始G138 Y轴模式开G139G140 主轴加工模式的指定G141 副主轴加工模式的指定G142 自动脱模主轴加工模式的指定G143 自动脱模主轴和第3刀架加工模式的指定G144 W-轴控制OFF指令G145 W-轴控制ON指令G146G147G148 B-轴控制OFF指令G149 B-轴控制ON指令G150G151G152 可编程尾架定位 (牵引尾架)G153 可编中心架G代码 (牵引)G154 W-轴单向定位指令G155 精确轮廓描绘模式ON指令G156 精确轮廓描绘模式OFF指令G157G158 刀具轴方向刀具长度偏移量G159 刀具轴方向刀具长度偏移量(不带旋转位移偏移量) G160 取消刀具轴方向刀具长度偏移量G161 G代码宏功能MODING162 G代码宏功能MODING163 G代码宏功能MODING164 G代码宏功能MODING165 G代码宏功能MODING166 G代码宏功能MODING167 G代码宏功能MODING168 G代码宏功能MODING169 G代码宏功能MODING170 G代码宏功能MODING171 G代码宏功能CALLG172G173G174G175G176G177G178 同步攻丝循环 (CW)G179 同步攻丝循环 (CCW)G180 动力刀具复合固定循环: 取消G181 动力刀具复合固定循环: 钻孔G182 动力刀具复合固定循环: 镗孔G183 动力刀具复合固定循环: 深孔钻G184 动力刀具复合固定循环: 攻丝G185 动力刀具复合固定循环: 轴向螺纹车削G186 动力刀具复合固定循环: 端面螺纹车削G187 动力刀具复合固定循环: 轴向直螺纹车削G188 动力刀具复合固定循环: 经向直螺纹车削G189 动力刀具复合固定循环: 铰孔/镗孔G190 动力刀具复合固定循环: 键槽切削循环G191 动力刀具复合固定循环: 轴向键槽切削循环G192G193G194G195G196G197G198G199G200G201G202G203G204G205 G代码宏功能CALLG206 G代码宏功能CALLG207 G代码宏功能CALLG208 G代码宏功能CALLG209 G代码宏功能CALLG210 G代码宏功能CALLG211 G代码宏功能CALLG212 G代码宏功能CALLG213 G代码宏功能CALLG214 G代码宏功能CALLM代码内容M00 程序停止M01 任选停止M02 程序结束M03 工作主轴起动 (正转)M04 工作主轴起动 (反转)M05 主轴停止M06 刀具交换M07M08 冷却液开M09 冷却液关M10 主轴点动关M11 主轴点动开M12 动力刀具轴停止M13 动力刀具轴正转M14 动力刀具轴反转M15 C轴正向定位M16 C轴反向定位M17 机外测量数据通过RS232C传送请求M18 主轴定向取消M19 主轴定向M20 尾架干预区或主轴干预监视关(对面双主轴规格) M21 尾架干预区或主轴干预监视开(对面双主轴规格) M22 倒角关M23 倒角开M24 卡盘干预区关,刀具干预区关M25 卡盘干预区开,刀具干预区开M26 螺纹导程有效轴Z轴指定M27 螺纹导程有效轴X轴指定M28 刀具干预检查功能关M29 刀具干预检查功能开M30 程序结束M31M32 螺纹车削单面切削模式M33 螺纹车削时交叉切削模式M34 螺纹车削逆向单面切削模式M35 装料器夹持器Z向滑动后退M36 装料器夹持器Z向滑动前进M37 装料器臂后退M38 装料器臂前进到卸载位置M39 装料器臂前进到卡盘位置M40 主轴齿轮空档M41 主轴齿轮1档或底速线圈M42 主轴齿轮2档或高速线圈M43 主轴齿轮3档M44 主轴齿轮4档M45M46M47M48 主轴转速倍率无效取消M49 主轴转速倍率无效M50 附加吹气口1关M51 附加吹气口1开M52M53M54 分度卡盘自动分度M55 尾架后退M56 尾架前进M57 M63取消M58 卡盘底压M59 卡盘高压M60 M61取消M61 圆周速度恒定切削时,恒定旋转应答无视M62 M64取消M63 主轴旋转M码应答无视M64 主轴旋转之外的M码应答无视M65 T码应答无视M66 刀架回转位置自由M67 凸轮车削循环中同步运行模式取消M68 同步模式A运行开M69 同步模式B运行开M70 手动换到指令M71M72 ATC单元定位在接近位置M73 螺纹车削类型1M74 螺纹车削类型2M75 螺纹车削类型3M76 工件捕手后退M77 工件捕手前进M78 中心架松开M79 中心架夹紧M80 过切前进M81 过切后退M82M83 卡盘夹紧M84 卡盘松开M85 LAP粗车循环后不返回起始位置M86 刀架右回转指定M87 M86取消M88 吹气关M89 吹气开M90 关门M91 开门M92 棒料进给器后退M93 棒料进给器前进M94 装料器装料M95 装料器卸料M96 副轴用工件捕手后退M97 副轴用工件捕手前进M98 尾架低压M99 尾架高压M100 等待同步指令M101 外部M码M102 外部M码M103 外部M码M104 外部M码M105 外部M码M106 外部M码M107 外部M码M108 外部M码M109 取消M110M110 C轴连接M111 拾取轴自动零点设定M112 M-刀具轴在第三刀架上停止M113 M-刀具轴在第三刀架前进转M114 M-刀具轴在第三刀架向回转M115 卸料器翻开M116 卸料器关闭M117 侧头前进M118 侧头后退M119 工件计数专用M120 无工件M121 固定中心架翻开/关闭M122 固定中心架后退M123 固定中心架前进M124 STM超时检测开M125 STM超时检测关M126 附加送气口3关M127 附加送气口3开M128 尾架转动后退M129 尾架转动前进M130 卡盘故障检测空气关M131 卡盘故障检测送气输出关M132 卡盘故障检测关M133 卡盘故障检测开M134 负荷监视关M135 负荷监视开M136 复合固定循环形状指定M137 对刀器互锁解除开M138 对刀器互锁解除关M139 自学功能启动M140 攻丝循环动力刀具恒周速应答无视M141 C轴夹紧指令选择M142 冷却液底压M143 冷却液高压M144 附加冷却液1关M145 附加冷却液1开M146 C轴松开M147 C轴夹紧M148 自动脱模主轴正转M149 自动脱模主轴反转M150 同步旋转关M151 同步旋转开M152 动力刀具轴互锁解除开M153 动力刀具轴互锁解除关M154 附加送气口2关(测量用吹气口) M155 附加送气口2开(测量用吹气口) M156 尾座互锁解除关M157 尾座互锁开M158 凸轮加工机-同步运行关M159 凸轮加工机-同步运行开M160 M161取消M161 进给倍率固定(100%)M162 M163取消M163 动力刀具主轴倍率固定(100%)M164 M165取消M165 进给保持和单程序段无视M166 尾架进给/后退互锁解除关M167 尾架进给/后退互锁解除开M168 忽略动力刀具轴恒周速应答无视M169 C轴没卡紧M170M171M172 车床内侧机械手互锁解除关M173 车床内侧机械手互锁解除开M174 附加冷却液2关M175 附加冷却液2开M176 Y轴松开M177 Y轴夹紧M178 尾架卡盘夹紧M179 尾架卡盘松开M180 机械手请求0M181 机械手请求1M182 机械手请求2M183 机械手请求3M184 卡盘互锁取消关M185 卡盘互锁取消开M186M187M188 尾架连接关(牵引可编程尾架规格) M189 尾架连接开(牵引可编程尾架规格) M190 尾架连接是可用G00移动M191 动力刀具主轴分度方向指定(顺时针) M192 动力刀具主轴分度方向指定(逆时针) M193 M194取消M194 螺纹车削相位核运行M195 M196取消M196 螺纹车削相位核对位移量有效M197 螺纹车削相位核对位移量去除M198M199M200 Z轴同步进给取消M201 Z轴同步进给G13M202 Z轴同步进给G14M203 刀架松开(数控刀架)M204 LR15M-ATC;循环时间缩短规格 (刀库换刀门关)M205 LR15M-ATC;循环时间缩短规格 (刀库换刀门开)M206 LR15M-ATC;循环时间缩短规格 (后退位置防护罩开)M207 LR15M-ATC;循环时间缩短规格 (后退位置防护罩关)M208 门互锁C,D开M209 门互锁C,D关M210M211 键槽切削循环:单向切削模式M212 M-刀具轴在第三刀架上停止或键槽切削循环:交叉切削模式M213 M-刀具轴在第三刀架上停止或键槽切削循环:进给量指定切削模式M214 M-刀具轴在第三刀架上停止或键槽切削循环:等分切削模式M215 负载监视G00忽略关M216 负载监视G00忽略开M217M218 附加吹气口关M219 附加吹气口开M220 平面车削关M221 平面车削旋转比 (1:1)M222 平面车削旋转比 (1:2)M223 平面车削旋转比 (1:3)M224 平面车削旋转比 (1:4)M225 平面车削旋转比 (1:5)M226 平面车削旋转比 (1:6)M227 LR15M-ATC;ATC操作完成等待指令M228 ATC下一个刀具返还指令M229 ATC动力刀具分度M230 外部M码M231 外部M码M232 外部M码M233 外部M码M234 外部M码M235 外部M码M236 外部M码M237 外部M码M238 平面车削动力主轴相位变更M239 副主轴模式主轴分度M240 动力刀具主轴:空档M241 动力刀具主轴:第1档M242 动力刀具主轴:第2档M243 排屑装置停止M244 排屑装置正转M245M246 副主轴卡盘互锁解除开M247 副主轴卡盘互锁解除关M248 副主轴卡盘夹紧M249 副主轴卡盘松开M250 工件推进器后退M251 工件推进器前进M252 激光尺数据写入M253 激光尺数据核对M254 程序停止M255M256M257M258M259M260M261M262M263M264 M265取消M265 脉冲手轮控制方式是取消快速进给M266M267M268M269M270M271 主轴低速开M272 主轴低速关M273M274M275M276M277M278M279M280M281M282M283M284M285M286M287M288 副主轴模式吹气关M289 副主轴模式吹气开M290 顶门关M291 顶门开M292M293M294M295M296 时间常数切换 (用于少量切削标志) M297 时间常数切换 (用于有效形状)M298M299。
mt4EA编程中的开平仓语句
mt4EA编程中的开平仓语句在mt4平台上要编写一个自动交易的ea,那其最基本的策略思路就是根据某种条件开仓。
这就涉及到两个概念:一个条件,一个开仓。
条件是根据不同的交易策略思路而定的,可以比较K线阴阳作为开仓条件,也可以将均线金叉死叉作为开仓条件,等等,也可以说开仓条件是千万种的。
而开仓就是执行开仓语句或者说开仓函数来开新订单。
在mql4语言中,开仓函数是OrderSend()函数,我们可以先看一下OrderSend()的结构:int OrderSend(string symbol, //货币名称int cmd, // 订单类型double volume, // 手数double price, // 价格int slippage, // 偏差double stoploss, // 止损double takeprofit, // 止盈string comment=NULL, // 注释int magic=0, // 订单识别码datetime expiration=0, // 有效期(用于挂单)color arrow_color=clrNONE // 颜色);在原则上,MQL4语言将OrderSend()函数归为int类型。
实际执行当中我们用bool类型也是可以的。
这里不讨论挂单,只以开现价单来说,如果要成功执行OrderSend()函数,那么就需要正确赋值其各个参量所需数值:•货币名称默认Symbol()为当前图表货币;•订单类型多单为OP_BUY,空单为OP_SELL;•手数我们可以定义ea输入变量:input double Lots = 0.03;•价格,开多单是Ask,开空单用Bid;•偏差我们也可以定义个ea输入变量:input int slippage = 10;•止损同样定义输入变量:input int StopLoss = 500;//止损点数•止盈和止损一样定义:input int TakeProfit = 1000;//止盈点数•注释可以根据需要定义,也可以留“”空值;•订单识别码可以定义:input int my_magic = 172583815;//订单识别码•有效期对于挂单有效,现价单用0值代替;•颜色,开仓点位图表上标记箭头颜色,根据需要设置,不需要就复制clrNONE;每个参量的赋值弄好后,我们假设条件是阳线开多单,阴线开空单,那么下面就可以用OrderSend()开仓函数来执行开多单和空单了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
如果你下载的是m4文件,同样你也需要先拷贝的experts\indicators目录下,然后使用MetaEditor打开源文件,点击编写按钮。这时会在目录下自动生成ex4文件,同时MT4导航栏自定义指标项目下会出现新指标,直接使用即可。
如果还有DLL文件,或者有.set,或者有.tpl等,
DLL为库文件,复制到experts\libraries,
.set为设置文件复制到experts\presets,
.tpl为模板文件,复制到templates
@
OrdersTotal()函数,可以计算当前账户中一共还没有平仓的单子和挂单的个数
()/AccountMargin()*100,2),&uot;% &uot;);
@ 测试数据次数过多,目录文件胖到走不到时,就减肥:
目录:\ \tester\history和tester\logs里的文件全部删除
@
如果你下载的是ex4文件,就将它拷贝到experts\indicators目录下,然后重新运行MT4,就可以在导航栏的自定义指标项目下看到新的指标名称,后面的使用和其他指标一样。