原文地址:MQL4函数 Print MarketInfo 的介绍 作者:季风
我们的群:
关于这篇文章
如果微信版面显示不全,可以拖到文章后面查看原文
主要说几个简单的函数
1:Print
将在EA的调试窗口输出日志信息。参数可以是任何类型的。
void Print( argument, // 第一个值 ... // 下一个值 ); |
参数
...
[in] 任何值用逗号分隔。参数的数量不能超过64个。
注意
数组不能传递给Print()函数。数组必须输入元素乘元素。
double类型具有高达16位数字后小数点精度,并且无论是在传统的或在科学格式都可以输出,取决于数据本身的精度是否达到。 float类型的数据输出与5位后的小数点。输出实数与另一个准确性或预定义的格式, 使用 PrintFormat() 函数.
BOOL类型的数据都为“真”或“假”行输出。日期显示为YYYY.MM.DD HH:MI:SS。要显示数据的另一种形式,用 TimeToString(). 如果该颜色出现在颜色集合里,颜色类型的数据被返回或者作为R,G,B值或者颜色名。
例子(理解)
void OnStart() { //--- )输出DBL_MAX使用print()这是相当于到 PrintFormat(%%.16G,DBL_MAX) Print("----DBL_MAX怎么看起来像-----"); Print("Print(DBL_MAX)=",DBL_MAX); //--- 现在输出DBL_MAX 使用 PrintFormat() PrintFormat("PrintFormat(%%.16G,DBL_MAX)=%.16G",DBL_MAX); //--- 输出结果为 // Print(DBL_MAX)=1.797693134862316e+308 // PrintFormat(%.16G,DBL_MAX)=1.797693134862316E+308 //--- 如何输出float float c=(float)M_PI; // 我们应该显式转换为目标类型 Print("c=",c, " Pi=",M_PI, " (float)M_PI=",(float)M_PI); // c=3.14159 Pi=3.141592653589793 (float)M_PI=3.14159 //--- 用实数计算看能发生些什么 double a=7,b=200; Print("---- Before arithmetic operations"); Print("a=",a," b=",b); Print("Print(DoubleToString(b,16))=",DoubleToString(b,16)); //--- 划分b (7/200) a=a/b; //--- 现在还原 b 变量中的值 b=7.0/a; // 预计该 b=7.0/(7.0/200.0)=>7.0/7.0*200.0=200 - 但它却不是,为什么 //--- 输出b的新计算出的值 Print("-----算术运算后"); Print("Print(b)=",b); Print("Print(DoubleToString(b,16))=",DoubleToString(b,16)); //---输出结果为 // Print(b)=200.0 // Print(DoubleToString(b,16))=199.9999999999999716 (可以看到他小于200) //---创建一个很小的值小量= 1E-013 double epsilon=1e-13; Print("----创建一个很小的数-----"); Print("epsilon=",epsilon); // epsilon=1E-013 //--- Now subtract epsilon from b and again output the value to the Experts journal b=b-epsilon; //--- 用两种方法 Print("---- B变减去这个很小的数-----"); Print("Print(b)=",b); Print("Print(DoubleToString(b,16))=",DoubleToString(b,16)); //--- 输出结果为 // Print(b)=199.9999999999999 (现在减去 epsilon 后 b 的值不能被舍入到 200) // Print(DoubleToString(b,16))=199.9999999999998578 // (现在后减去 epsilon b 的值不能被舍入到 200) } |
注意:double类型精度
print输出格式的
多个类型赋值
数据类型大小范围
print输出窗口
2:MarketInfo 函数
返回有关证券"市场观察"窗口中列出的各种数据。
double MarketInfo( string symbol, // 货币名称 int type // 信息类型 ); |
参数
symbol
[in] 商品名称.
type
[in] 预定义的类型 。可以是任何的请求标识符的值.
返回的值
返回有关证券"市场观察"窗口中列出的各种数据。关于目前的安全信息的一部分存储在 预定义变量里.
预定义的类型
ID | 值 | 描述 |
MODE_LOW | 1 | 当日最低价 |
MODE_HIGH | 2 | 当日最高价 |
MODE_TIME | 5 | 上次tick传入时间 |
MODE_BID | 9 | 该货币最后叫买价 |
MODE_ASK | 10 | 该货币最后叫卖价 |
MODE_POINT | 11 | 该货币的最小变动单位 |
MODE_DIGITS | 12 | 该货币的报价位数 |
MODE_SPREAD | 13 | 点差 |
MODE_STOPLEVEL | 14 | 最小止损线距离 |
MODE_LOTSIZE | 15 | 一标准手用的资金 |
MODE_TICKVALUE | 16 | 一标准手下一个点的价值 |
MODE_TICKSIZE | 17 | 报价的最小单位 |
MODE_SWAPLONG | 18 | 多头掉期 |
MODE_SWAPSHORT | 19 | 空头掉期 |
MODE_STARTING | 20 | 市场开始日期 (在将来经常用到) |
MODE_EXPIRATION | 21 | 市场截止日期 (在将来经常用到) |
MODE_TRADEALLOWED | 22 | 被允许交易的商品 |
MODE_MINLOT | 23 | 允许交易的最小手数 |
MODE_LOTSTEP | 24 | 改变一标准手的幅度 |
MODE_MAXLOT | 25 | 允许交易的最大手数 |
MODE_SWAPTYPE | 26 | 掉期计算的凡是. 0 - 点; 1 - 基本; 2 - 偏好; 3 - 保证金; |
MODE_PROFITCALCMODE | 27 | 盈利计算模式. 0 - 外汇; 1 - 黄金; 2 - 期货 |
MODE_MARGINCALCMODE | 28 | 保证金计算模式. 0 - 外汇; 1 - 黄金; 2 - 期货; 3 - 黄金指数 |
MODE_MARGININIT | 29 | 一标准手初始保证金 |
MODE_MARGINMAINTENANCE | 30 | 一标准手开仓保证金 |
MODE_MARGINHEDGED | 31 | 一标准手护盘保证金 |
MODE_MARGINREQUIRED | 32 | 一标准手自由保证金 |
MODE_FREEZELEVEL | 33 | 订单冻结点的水平。如果执行价格在于定义的冻结水平的范围内,不能修改、 取消或关闭顺序 |
附录代码
//+------------------------------------------------------------------+ //| 该脚本在商品上的Print信息 | //+------------------------------------------------------------------+ void OnStart() { Print(" 1 当日最低价_LOW= ", MarketInfo(Symbol(), MODE_LOW )); Print(" 2 当日最高价_HIGH= ", MarketInfo(Symbol(), MODE_HIGH)); Print(" 5 最后的K线变动时间_TIME= ", MarketInfo(Symbol(), MODE_TIME)); // (服务器显示时间)。 Print(" 9 该货币最后叫买价_BID= ", MarketInfo(Symbol(), MODE_BID)); // (取得相应货币对的即时价位,而不管这个EA是放在哪个货币对图表上.如 bid =MarketInfo("GBPUSD",MODE_BID); // 取得 Bid 价位) Print(" 10 该货币最后叫卖价_ASK= ", MarketInfo(Symbol(), MODE_ASK)); Print(" 11 该货币最小变动单位点值_POINT= ", MarketInfo(Symbol(), MODE_POINT)); Print(" 12 小数位数_DIGITS= ", MarketInfo(Symbol(), MODE_DIGITS)); Print(" 13 点差_SPREAD= ", MarketInfo(Symbol(), MODE_SPREAD)); Print(" 14 规定最小止赢止损线_STOP LEVEL= ", MarketInfo(Symbol(), MODE_STOPLEVEL)); Print(" 15 一标准手所用资金_LOT SIZE= ", MarketInfo(Symbol(), MODE_LOTSIZE)); // 标准手大小,黄金是100盎司,每次交易必须是100盎司的倍数 ( 黄金: 100 ) 。 Print(" 16 一手每点该货币的价值_TICK VALUE= ", MarketInfo(Symbol(), MODE_TICKVALUE)); // 跳动的基值,价格每次跳动的值都是它的倍数。如黄金,价格每次跳动都是0.05的倍数 ( 黄金: 0.05 ) 。 Print(" 17 报价最小单位_TICK SIZE= ", MarketInfo(Symbol(), MODE_TICKSIZE)); Print(" 18 多头掉期_SWAP LONG= ", MarketInfo(Symbol(), MODE_SWAPLONG)); Print(" 19 空头掉期_SWAP SHORT= ", MarketInfo(Symbol(), MODE_SWAPSHORT)); Print(" 20 市场开始日期_STARTING= ", MarketInfo(Symbol(), MODE_STARTING)," (主要用于期货)"); Print(" 21 市场截止周期_EXPIRATION= ", MarketInfo(Symbol(), MODE_EXPIRATION)," (主要用于期货)"); Print(" 22 交易允许货币对数量_TRADE ALLOWED= ", MarketInfo(Symbol(), MODE_TRADEALLOWED)); Print(" 23 允许的最小手数_MIN LOT= ", MarketInfo(Symbol(), MODE_MINLOT)); Print(" 24 改变标准手步幅_LOT STEP= ", MarketInfo(Symbol(), MODE_LOTSTEP)); Print(" 25 允许的最大标准手数_MAX LOT= ", MarketInfo(Symbol(), MODE_MAXLOT)); Print(" 26 掉期计算的方式_SWAP TYPE= ", MarketInfo(Symbol(), MODE_SWAPTYPE)," (0:点; 1 -基本货币对; 2: 兴趣; 3: 货币保证金)"); Print(" 27 赢利计算模式_PROFIT CALC MODE= ", MarketInfo(Symbol(), MODE_PROFITCALCMODE)," (0: Forex(外汇); 1: CFD(黄金); 2: Futrues(期货)) "); Print(" 28 保证金计算模式_MARGIN CALC MODE= ", MarketInfo(Symbol(), MODE_MARGINCALCMODE)," (0: Forex(外汇); 1: CFD(黄金); 2: Futrues(期货); 3: CFD for indices(黄金指数))"); Print(" 29 一个标准手的初始保证金_MARGIN INIT= ", MarketInfo(Symbol(), MODE_MARGININIT)); Print(" 30 一个标准手的开仓保证金_MARGIN MAINTENANCE= ", MarketInfo(Symbol(), MODE_MARGINMAINTENANCE)); Print(" 31 一个标准手的护盘保证金_MARGIN HEDGED= ", MarketInfo(Symbol(), MODE_MARGINHEDGED)); Print(" 32 一个标准手的自由保证金_MARGIN REQUIRED= ", MarketInfo(Symbol(), MODE_MARGINREQUIRED)); Print(" 33 冻结订单水平点_FREEZE LEVEL= ", MarketInfo(Symbol(), MODE_FREEZELEVEL)); } |
如果你感兴趣,请关注我们,我们会将最新消息推送给您