搜索
楼主: hefeiddd

一个笨蛋的股指交易记录-------地狱级炒手

  [复制链接]
 楼主| 发表于 2008-5-24 18:54 | 显示全部楼层
Name:
FX5_Divergence
Author: FX5 (2007.06.05 13:54)
Rating:7.6
Downloaded:7473
Download:
FX5_Divergence_V2.0.mq4 (12.2 Kb) View
FX5_Divergence_v1.5.mq4 (14.6 Kb) View
FX5_Divergence_v1.1.mq4 (12.6 Kb) View
FX5_Divergence_V2.1.mq4 (11.3 Kb) View

Divergence is a powerful tool for detecting price reversal points from support and resistance zones. It usually gives us a relatively early signals compared to those given by moving average indicators. It can be successfully applied to many technical indicators and end up with good results.


This indicator will plot divergence lines between the price and OsMA indicator. It will give buy/sell signal according to the type of divergence that was detected. The indicator also is capable of drawing divergence lines for the whole history prices located within a specific chart.



Bullish divergence will be plotted with green lines on both price and OsMA idicator windows.



Bearish divergence will be plotted with red lines on both price and OsMA idicator windows.

I hope this indicator prove to be a useful tool.


Changes to Version 1.5:
  • A bug was fixed in updating divergence lines as the live quotes flow;
  • A sound Alert feature was added to the indicator and can be enabled or disabled from indicator settings;
  • Classical divergence is plotted in Solid Style (continues) lines, while hidden divergence is plotted in Dot Style (interuppted) lines.

Changes to version 2.0:
  • The code was rebuilt from scratch to make the indicator runs much faster.
  • The indicator now doesn't repaint any of its signals.
  • Some improvements in the signal identification algorithms.
Version 2.1:

  • I attached the last file by mistake. This is the one I wanted to attach. It is the last version. I am designating it version 2.1.
金币:
奖励:
热心:
注册时间:
2006-7-3

回复 使用道具 举报

 楼主| 发表于 2008-5-24 18:57 | 显示全部楼层
Name:
FX5_MACD_Divergence
Author: FX5 (2007.06.14 11:29)
Rating:8.8
Downloaded:8190
Download:
FX5_MACD_Divergence_V1.1.mq4 (12.4 Kb) View
FX5_MACD_Divergence_V1.0.mq4 (12.1 Kb) View

After the success of the original indicator, I decided to write more indicators for detecting divergence between price and other indicator.



This indicator will plot divergence lines on the MACD indicator and will give buy and sell signal by displaying green and red arrows. It also has a built-in alert function. As the original indicator, bullish divergence is plotted in green lines while bearish divergence is plotted in red. If the divergence is classic the line will be solid and if the type is reversed the line will be interrupted.



I hope you gets the most benedfit from this indicator.

Changes to verion 1.1:
- This version is directed to traders who do not want repainted singals. The signals are not repainted buy they are delayed one candle.
金币:
奖励:
热心:
注册时间:
2006-7-3

回复 使用道具 举报

 楼主| 发表于 2008-5-24 18:59 | 显示全部楼层
金币:
奖励:
热心:
注册时间:
2006-7-3

回复 使用道具 举报

 楼主| 发表于 2008-5-25 06:36 | 显示全部楼层
在 MQL4.Community上轻松简单地公布影音图像 [

介绍今天,影音的格式多种多样。编辑影音的程序也是数不胜数。文章讲解在  网站上如何可以轻松公布高质量影音图像,并且减少创建影音的多余动作。

关于格式
许多现存的影音格式不能够在网络上公布。那是因为它本身不具备兼容性和可用代码。 但是存在一个普遍的方法 - 重新编译影音成为 *FLV格式,这样就可以在任意支持Adobe Flash version 8的计算机上浏览了。

上面提及到的这种影音格式在我们的论坛上可以展示。FLV 文件格式是我们论坛的影音服务器创建的。上传到本网站的源代码文件可以是 AVI, MPG, WMV格式或直接是 FLV格式。


创建影音的程序
不是所有的用户都能够使用有偿的创建程序的。所以建议安装一个免费好用的程序 CamStudio, 轻松从屏幕上记录影音图像:


程序的分配是一个 zip 资料文件 camsetup.zip (1.4 Mb),可以在任何临时文件夹内打开安装。为了方便我们在文章中添加了 CamStudio Installet

程序安装程序zip 文件下载完毕后,我们进行安装。创建一个临时文件夹并从 zip 中复制文件。首先安装 camsetup.exe.文件,这样程序会自动安装,不需要点击下一步。程序将会被安装到文件夹C:\ProgramFiles\CamStudio中。你也可以指定其他路径。
在完成程序安装后,程序系统将会像是一个关于影音代码的对话框:



同意并点击 "继续执行",随后将会显现成功安装的对话框。你就可以使用该程序了。
在程序的安装方面,不会有任何问题出现。基本属于全自动安装。点击 "Ready" 开始运行程序。


设置浏览
万事俱备,我们现在准备从计算机的屏幕上剪辑影音图像(称作捕捉影像)。这个类型程序还有一个好处 - 所有需要捕捉影像的设置已经指定。 可以在菜单中选择"Options" - "Video Options" 查看。



设置完成。还有一些细节要处理。 CamStudio Lossless Codec v1.0 是作为代码被设定的。 "Quality"参量设定值为最右端的值100。这意味着捕捉到的影音图像代码将被100%储存。

重要提示:不要改变该参量的最大值 (100% 质量)。因为再没有技术支撑的情况下,得到的影音图像将降低质量。
下一个参量 "Set Key Frames Every ... frames"的值为 200。意味着每 200画格将创建一个关键的片段 。以下是一个简短的说明:
作为影像记录设备需要将每一个影像点都清楚地记下.视频压缩是需求经济体的模式。据悉,较大图像部分保留不变的片段会被替换。这就意味着没有必要对每个影像图片进行描述。 相反地,一些最初的片段需要记住,与先前的片段对比在影像点改变之后被删除。这种方法便于压缩影音文件。

虽然,片段在不断地更新和压缩过程中并不会影响其质量。防止影音质量变坏的方法很多,最简单的方法就是时常对关键片段进行更新。如果更新的次数过于频繁("Set Key Frames Every"的参量值小),影音的质量会非常的高,但同时最终得到的文件将非常的大。如果值过大(例如创建关键片段为每 500),最终文件将会小的多,但质量会稍差些。该参量值 200 对于影音的质量是个最佳设定。
下一个参量是 "Capture Frames Every ... milliseconds"。该参量指示从屏幕抓取影音片段的间隔时间。 "Capture Frames Every"值通常设定为100 毫秒。因为我们需要记录不是一个动态的影片或公式1。 片段的创建每 100毫秒给我们每秒10个片段,对于显示视频插图已经足够了。
第二个参量"Framerates" - "Playback Rate ... frames/second" 设置在哪些片段上将会显示在最终的文件中。 据了解,人类的视觉观察不能够超出每秒25个片段。对于从电脑上捕捉影音来讲, "PlayBack Rates"值等于每秒10个片段即可。

最后一个参量 "Time Lapse" 作为 "Max Framerate"被留下 (图像中的显示)。我们同样可以查看压缩算法的配置。点击"配置"。

对于选择压缩算法 会显现一个窗口。这里需要已经检验的 "GZIP"。压缩的 "程度"被指定在1 (最快捷的代码方法)到 9 (最小尺寸的压缩)之间。我们建议的默认值为7 。点击 "OK" 保存设置。捕捉图像的准备工作就绪。
重要提示: 不要改变创建影音的默认值。这些参量是我们论坛需要影像的最佳参量。


开始捕捉视频图像在开始捕捉图像以前我们需要指定记录的部分:全屏,整个窗口还是部分窗口。这种选择可以在菜单"Region"中选择。

最方便的模式是 "Window",因为这种情况您可以轻松点击所需要的窗口,同时程序会限定窗口的界限。大多数情况下使用这种模式,例如当我们想捕捉EURUSD H1 图表的食品片段。按红色按钮 "Record"开始记录视屏片段。

显示信息告知我们点击的窗口捕捉:


点击 "OK" 随后点击需要的窗口。四个绿色的角会显示在指定捕捉区域的每个角上。

在影像捕捉期间 CamStudio 会显示服务信息:

例如, 以下当前状态:
  • Current Frame : 50 (当前记录片段数量)
  • Time Elasped : 5.06 sec (记录长度 5.06 秒)
  • Number of Colors: 32 bits (颜色方案记录)
  • Codec : CamStudio Lossless Codec v1.0 (记录使用的代码类型)
  • Actual Input Rate: 8.10 fps (每秒片段)
  • Dimension : 641x481 (记录图像尺寸的像素)。

您可以点击 "Stop"键停止捕捉。在您点击停止捕捉影像会显现一个保存视频文件的窗口。


您可以选择任意位置保存你的视频文件;程序将会记住该文件夹并将随后的文件保存到这个文件夹中。例如,我创建一个文件夹 "C:\Program Files\CamStudio\videofiles" 以名称test.avi将视频文件保存。 视频文件准备完成,我们可以进行公布。


请注意,创建视频文件需要互联网通道的速度只能够是 29 kilobit每秒。这样即使是较差的通道也可以观看。


公布视频文件在评论或文章中公布视频,需要在编辑处点击 "影像"。 将会显示两个篮框。点击 "上传并转换":




点击 "浏览..." 并选择 *.avi file (test.avi)。


当文件从avi转换到 flv时,在最大容量中使 "Quality"的值在"Perfect" 不改变(默认值) 。


在点击"插入"后文件上传开始运行。



以上是公布影像的第一步。我们能够看到当前上传影像的进度为 37%。当上传完成后,一个黑色的窗口将会显示在指定的位置。视频文件开始加载。您可以在黑色的区域直接添加需要的描述。例如 "how to publish video"。

在点击"保存"后,您将看到黑色窗口会给出在我们网站上服务的功能并开始转换文件 - "video in progress"。该步骤为第二步。

当转换完成后,你看到的结果如下:
            
how to publish video


CamStudio程序的有益特性
首先,可以尽可能地设置开始、停顿、停止捕捉影像的“热键”。设置热键需要在菜单中 "Options" 选择 "Keyboard Shortcuts"。
"F8"键的为开始/终止捕捉图像的默认键。 "F9" 意味着捕捉影像结束并保存为 avi 文件。 "F10"取消影像的捕捉。您可以通过设置 "热键"改变这些按键的功能。
其次,在记录影像的同时您可以感受到视觉光标。使用菜单 "Options" - "Cursor Options".


这里您可以选择是否使用该选项。 "Hide Cursor" - 记录影像时光标不会显示, "Show Cursor" - 记录影像时显示光标。您同样在这里可以选择设定视觉效果类型。
开启"Use Actual Cursor" 意味着光标以通常模式显示。开启 "Use Custom Cursor" 或"Use Cursor From File"允许记录影像以其他类型模式光标显示。您可以尝试改变光标的类型。这是件趣事。
另外,在这个栏框中您可以选择选项"Highlight Cursor"。光标的默认值被设定为一个黄色的圈。您可以从提供的列表中选择其他形状。若要改变其颜色按 "Color"键。会显示多种颜色供选择。
我们可以通过点击鼠标界定视觉效果。检测按键 "Enable Visual Click Feedback"。现在在记录的影像上点击鼠标左键时,光标将会突出显示一种颜色(默认值为红色) 。当点击鼠标右键时,突出显示另一种颜色 (默认值为蓝色) 。您同样可以改变这些颜色的设定。
文章中对程序CamStudio选项的描写就到这里。希望您会喜欢学习该程序的其他功能。


结论正如你所看到的,创建自己的影像就是如此的简单。仅仅是因为您没有合适的软件而已。我希望文章不仅仅能够帮助您在我们的论坛上公布发表影像文件,同样可以记录多种多样的视频文件。
您可以继续研究这个课题 - 在计算机上创建影像现存在很多资料。希望文章可以给你带来很大的帮助。
转自俄罗斯 MetaQuotes Software Corp.


附件:
camsetup.zip (1.4 Mb)
创建: 2008.04.23  





关于终端的文章资讯
MetaTrader 4

下载 MT4 - 3.5 Mb

移动交易!

购买许可证立即进行移动交易


[ 本帖最后由 hefeiddd 于 2008-5-25 06:45 编辑 ]
金币:
奖励:
热心:
注册时间:
2006-7-3

回复 使用道具 举报

 楼主| 发表于 2008-5-25 06:39 | 显示全部楼层
外汇交易ABC [简介

金融市场的运作首先是交易业务。正如我们儿时熟知的,按照自己的直觉进行买卖。但是外汇交易却有些不同。本文将解析外汇交易的一些想法和外汇交易程序MQL 4 。


回顾历史

从课本上我们得知在古老人类时代是不使用金钱的 – 他们享受自然的产物。金钱的发明和创造本身就是人类一部伟大的进程。使用钱币的人们可以通过金钱进行相互交换产物。无论是国家和国家之间的相互交换,还是时代的变迁,钱币总是能够很容易的储存或是运输,例如,黄金或白银。当然,每个国家都有自己的历史,风俗和货币。但是远古时期的贸易活动都是通过商人带着货物从一个国家到另一个国家进行货物交换.货物的交换可以是地方性的或是世界性的,例如,黄金.



我们的时代
如今,贵重金属不能够作为实用的支付工具.所以国家开始制定付款支付货物的交换.在国家与国家的贸易中付款支付货物的交换继而产生了货币与货币之间的汇率.例如, EUR/USD 之间的汇率为 1.25.这就意味着一欧元可以兑换1.25 美元. 因此,在两个自由货币之间必须计算货币汇率.大型的外汇交换通常是通过银行来执行输入/输出业务,所以产生了标准货币对和标准交换总量.货币对的名称在MetaTrader 4客户终端中以货币的简写形式显现.例如, EURUSD表示在美元中欧元的汇率, GBPJPY -在日元中英镑的汇率.既第一个货币总是指定在第二个货币范围内的汇率.



货币存款
虽然在交易过程中可以存在多种货币,但结果却总是写入一种货币 - 货币存款.如果货币存款为美元( US ),盈利和亏损都会以美元显示.如果是欧元,盈利和亏损自然会以欧元显示.对于货币存款的相关信息你可以查看使用 AccountCurrency() 函数.可以用来转换交易结果.



标准份额大小 - 标准手数
在一种货币与另外一种货币交换时,使用的单位为"标准手数".以标准手数来进行买卖.对于不同的货币对标准手数存在不同值. 目前,最大的货币对标准手数值等于100 000 .但什么是 100 000呢?当我们买进时,需要支付金钱.当我们卖出时,可以获取金钱.但是对于货币对,我们买卖的同时也可以获得一定盈利.这就是为什么通常我们获取第一个货币价格关系到第二弟货币的原因.对于 EURUSD标准手数为100 000欧元.如果我们买进一个 EURUSD标准手,意味着我们用 100 000 欧元并换取一定数量的美元.由于收入和支出必须保持平衡 100 000 欧元 = X 美元.那么我们怎样去计算呢?让我们在表达式中用美元还原欧元:

EURO= k*USD
  k 表示 EURUSD的交换汇率;
100 000 (k*USD) = X USD => X= k*100 000;
如果当前 EURUSD汇率为 1.25, 就是X=125 000.


由上面的计算可以得出 EURUSD标准手数, 我们的 100 000 欧元可以换取得到125 000 美元.有时有人说 - 买进欧元和卖出美元就是表示买进 EURUSD .对于货币对的标准手数的信息您可以使用 MarketInfo() 函数获取.例如:



MarketInfo(Symbol(), MODE_LOTSIZE);
您同样可以获得货币对名称文本和函数


MarketInfo("EURUSD",  MODE_LOTSIZE);
将返回100 000.会被写入帮助文件: MODE_LOTSIZE 是在货币对基础的份额大小.对于EURUSD 货币对的基础货币为 EUR (*).对于 CHFJPY货币对的基础货币对为瑞士法郎,相关的价格将会以瑞士法郎表示.



交易结果

让我们来看一看其他的示例.我们以1.2500价格买进 1标准手.当前价格为1.2600,所以我们决定收盘,就是出卖 1各标准手的 EURUSD.

写下的水平:
以1.2500买进1 标准手的 EURUSD : + 100 000 欧元 - 125 000美元.
以1.2600卖出1个标准手的EURUSD : - 100 000 欧元 + 126 000 US美元.
交易业务的盈利结果: 0 EURO + $ 1000.

结论:从 EURUSD 交易业务的盈利结果用美元来表示,即货币对的第二种货币.尝试计算其他交易的结果: 以2.30价格买进一个标准手的 GBPCHF并且以 2.40价格收盘。得到的将是什么结果呢?


杠杆和保证金
在金融市场的交易中允许从保证金获取盈利。就我们的范例而言,买进1个标准手的 EURUSD,我们需要超过100 000 美元 (125 000汇率为 1.25)。大多数经纪允许交易者调用‘杠杆’。杠杆的值会指出对于开仓可用的次数。金钱总数需要以保证金命名开仓。在没有杠杆情况下,1个标准手的 EURUSD 需花费 100 000欧元或125 000 美元(汇率为 1.2500)如果经纪提供给您100的杠杆, 这样金钱的总数在开仓位置将被减少100次并且为1250 美元。 这样我们已经计算出的盈利值仍然相同。对于杠杆值您可以在交易账户中使用 AccountLeverage()函数查看。 由此,开仓标准手的保证金被指定为:
保证金(基础货币对) = 标准手价格 (基础回避对) / 保证金_大小.

基础货币对的价格在货币存款中是基础货币对和货币存款之间的比率。


保证金计算

范例:

MarketInfo("GBPJPY", MODE_LOTSIZE) 给出的值 70 000 (LS).
AccountCurrency() 函数返回 "EUR" (AC).
AccountLeverage() 函数返回50 (AL).
我们怎样计算当前时刻 GBPJPY的价格(M)?

基础货币为 GBP,这样
M = 70000 GBP / AL = 70 000*GBPEUR / AL = 70000 / EURGBP / AL.

如果此时 EURGBP的汇率为0.6786,那么
M = 70000 / 0.6786 / 50 = 2063.07 EURO.

如果杠杆等于100,保证金将少于两倍 - 1031.54 欧元。对于10的杠杆,保证金将是:
M = 70000 / 0.6786 / 10 = 10315.36.


由此可以看出,杠杆的大小只影响开仓位的保证金大小,但是不会影响获取盈利的多少。同样需要注意的是在欧元(货币存款)当中保证金的大小将会和 EURGBP汇率一起波动,应为基础货币为英镑。在我们的范例中,我们可以用 1/EURGBP还原GBPEUR。因为货币对只能够获取 EURGBP。




点数 - 最小价格改变
在外汇交易中的货币对每种货币的差异不仅在自己的特性上,同样在他们汇率的小数点数量上。例如, GBPJPY的汇率,2006年12月29日为 233.18,同一天 GBPUSD 的汇率为1.9587。小数点的总数可以使用函数设置

MarketInfo(Symbol(), MODE_DIGITS);
例如,函数

MarketInfo("GBPJPY", MODE_DIGITS);
将返回2.

相应地,对于当前不同的货币对最小价格的改变也将不同。这个值通常等于 0.01,对于货币对 EURUSD 为 0.0001。在当前开价中这个最小价格改变被称为 ,可以使用函数获取:

MarketInfo(Symbol(), MODE_POINT);
对于当前货币对,函数的值

MarketInfo(Symbol(), MODE_POINT); and MarketInfo(Symbol(), MODE_TICKSIZE);相同。


在货币存款中的价格点
估测风险,当价格移动至一定点数交易者必须知道开仓的亏损数量。或者相反,在亏损点上计算可以接受的亏损量。这样,需要使用函数

MarketInfo(Symbol(), MODE_TICKVALUE);在货币存款中返回点值。
必须要注意的是对于货币对点值将会改变,第二个值不是货币存款。

每个标准手的保证金
最后的函数考虑到

MarketInfo(Symbol(), MODE_MARGINREQUIRED);
卖出价 返回一个标准手的价格。


以上范例的函数使用
下面您可以看到脚本显示的上面12组货币对的函数数据。必须注意脚本的自定义函数 MarginCalculate()以买入价返回的标准手数。脚本允许学习申请 MQL4 函数使用到智能交易的金钱管理和风险管理的计算中。.

//+------------------------------------------------------------------+//|                                          SimplySpecification.mq4 |//|                      Copyright &copy; 2007, MetaQuotes Software Corp. |//|                                       http://www.metaquotes.net/ |//+------------------------------------------------------------------+string SymbolsArray[13] = {"","USDCHF","GBPUSD","EURUSD","USDJPY","AUDUSD","USDCAD","EURGBP","EURAUD","EURCHF","EURJPY","GBPJPY","GBPCHF"};//+------------------------------------------------------------------+//| string SymbolByNumber                                            |//+------------------------------------------------------------------+string GetSymbolString(int Number)  {//----   string res = "";   res = SymbolsArray[Number];   //----   return(res);  }//+------------------------------------------------------------------+//| A very simple function to calculate margin for Forex symbols.    |//| It automatically calculates in the account's base currency and   |//| does not work for complicated rates that do not have direct      |//| recalculation into the trade account's base currency.            |//+------------------------------------------------------------------+double MarginCalculate(string symbol, double volume)  {   string first    = StringSubstr(symbol,0,3); // the first symbol, for example,  EUR   string second   = StringSubstr(symbol,3,3); // the second symbol, for example, USD   string currency = AccountCurrency();        // deposit currency, for example,  USD   double leverage = AccountLeverage();        // leverage, for example,          100// contract size, for example, 100000   double contract = MarketInfo(symbol, MODE_LOTSIZE);   double bid      = MarketInfo(symbol, MODE_BID);      // Bid price//---- allow only standard forex symbols like XXXYYY   if(StringLen(symbol) != 6)     {      Print("MarginCalculate: '",symbol,"' must be standard forex symbol XXXYYY");      return(0.0);     }//---- check for data availability   if(bid <= 0 || contract <= 0)      {      Print("MarginCalculate: no market information for '",symbol,"'");      return(0.0);     }//---- check the simplest variations - without cross currencies   if(first == currency)          return(contract*volume / leverage);           // USDxxx   if(second == currency)         return(contract*bid*volume / leverage);       // xxxUSD//---- check normal cross currencies, search for direct conversion through deposit currency   string base = currency + first;                   // USDxxx   if(MarketInfo(base, MODE_BID) > 0)        return(contract / MarketInfo(base, MODE_BID)*volume / leverage);//---- try vice versa   base = first + currency;                          // xxxUSD   if(MarketInfo(base, MODE_BID) > 0)        return(contract*MarketInfo(base, MODE_BID)*volume / leverage);//---- direct conversion is impossible   Print("MarginCalculate: can not convert '",symbol,"'");   return(0.0);  }//+------------------------------------------------------------------+//| script program start function                                    |//+------------------------------------------------------------------+int start()  {//----   for(int i = 1; i < 13; i++)     {      Print("Symbol=",GetSymbolString(i),"  spread=",MarketInfo(GetSymbolString(i),      MODE_SPREAD),"  margin at 1 lot=",MarginCalculate(GetSymbolString(i),1),      "  MODE_TICKVALUE=",MarketInfo(GetSymbolString(i),MODE_TICKVALUE),      ", MODE_TICKSIZE=",MarketInfo(GetSymbolString(i),MODE_TICKSIZE),      " MODE_MARGINREQUIRED=",MarketInfo(GetSymbolString(i),MODE_MARGINREQUIRED));     } //----   return(0);  }//+------------------------------------------------------------------+
*大多数情况下,货币对的基础货币是在货币对的第一位,当然,也存在不同的服务器设定。

转自 MetaQuotes Software Corp.

创建: 2008


[ 本帖最后由 hefeiddd 于 2008-5-25 06:42 编辑 ]
金币:
奖励:
热心:
注册时间:
2006-7-3

回复 使用道具 举报

 楼主| 发表于 2008-5-25 06:58 | 显示全部楼层
知识园地


MetaTrader 4客户端的秘密 [ en | ru ]


点击热键 F11,客户端转换为全屏模式。



在全屏模式下调用功能键使用如下:
  • Ctrl+M - Market Watch (&laquo;市场观察&raquo;);
  • Ctrl+N - Navigator (&laquo;导航&raquo;);
  • Ctrl+T - Terminal (&laquo;终端&raquo;);
  • Ctrl+D - Data window (&laquo;数据窗口&raquo;).
还原一般形态重按热键 F11。


***

选择热键操作可以快速将指标,智能交易或脚本添加到图表中。

这种形式在全屏状态下更起作用。
您可以在“导航”窗口“热键设定”进行对热键的指定。



您可以按照自己的意愿进行随意的设定。





***

方便更好地定位图表,必要时您可以使用快速导航。

开启快速导航,可以按空格键 ,Enter或者是图表左下方的光标。在出现 标志后双击其标志。






切记设定图表为自动滚动。


为了精确图表位置快速导航的模式如下:
  • [时间 (小时:分钟)]
    例如: 8:30
  • [日期]
    例如: 16.10.2004
  • [日期] [时间]
    例如: 16.10.04 8:30
在快速导航的帮助下您可以快速改变货币对图表和他的周期。这种方法在全屏模式下更为方便。
对于改变图表的货币对和周期快速导航的模式:
  • [货币对名称]
    例如: GBPUSD
  • [图表周期]
    例如: M30
  • [货币对名称],[图表周期]
    例如: GBPUSD,M30
执行导航命令按Enter,取消则按 Esc。在快速导航中一次只可以执行一个命令。


***

在“终端”顶部双击鼠标左键即可缩小窗口到当前交易账户的状态。

您可以通过在窗口顶部双击缩小窗口,以达到使图表的剩余空间更广。
还原窗口可以双击缩小窗口并点击“还原”即可。






***

常用的指标/脚本/智能交易/账户可以添加到“收藏夹”方便快速使用。

添加收藏可以将鼠标放置于欲收藏的指标/脚本/智能交易/账户名称上,然后单击鼠标右键,选择“添加选项”命令。



这样项目列表会被收藏到“导航”窗口中的“收藏夹”。





***

不用货币对可以进行保存隐藏。

隐藏货币对有以下几种方法:
  • 在“市场观察”窗口的菜单中选择命令“全部隐藏”。

  • 将鼠标放置货币对上击左键,选择 Delete键。

  • 在“市场观察”窗口选择命令“货币对”,并且打开隐藏/显示货币对窗口。



如果是以下情况Символ скрыть нельзя, если
  • 其货币对存在开仓或挂单
  • 在当前时期图表是打开的
  • 用于重新计算交叉的货币对。


***

如果新闻消息禁止,图表会保存。


对于菜单中 "服务器 -> 设置"中,请在 "服务器"上选择"允许新闻"。





***

可以设定几种货币对,并且在它们之间相互转换。

如果您选择使用不同的货币对,这种设定是非常方便的。隐藏所有“多余”货币对并保存到获取部分。





***

按F10弹出开价窗口。

如果在菜单中显示“总在前面”,那么您在执行其他工作时同样可以注视开价窗口。



在菜单中打开“属性”窗口,您可以在其窗口中设定颜色和字码:





***

背景颜色和柱的颜色,指标和对象可以在所有图表中相同。

对于任意图表的设置改变,您必须:设定颜色,放置对象,指标等等。随后,打开菜单 &laquo;图表 ->模板 -> 保存模板&raquo;并且把保存的到的模板命名为default.tpl



此刻起,打开的图表会接受所有设定的模板。
在模板中可以设定以下内容:
  • 图表类型和颜色;
  • 颜色;
  • 图表比例;
  • 图表中的 OHLC线;
  • 智能交易和它的参数;
  • 技术指标和它的设定;
  • 曲线研究;
  • 划分天数。


***

从测试中打开图表或独立打开窗口可以设定指定的模板。

为了使创建的模板从测试中打开形成默认,模板必须以tester.tpl名称保存。



对于图表独立打开的默认 - offline.tpl。



如果在打开独立图表命名中未找到 offline.tpl,则使用default.tpl。



***

如果您拥有几个账户,您可以对每个账户设定数据图表。

对帐户之间的转换,数据图表将会自动打开。
创建的数据图表,必须以账户的名称保存。





***

为了快速地弹出对象 "十字光标",可以点击鼠标中键或Ctrl+F。

这种方法在全屏模式下更为方便。


***

借助垂直线您可以快速得知在图表点之间的柱数量的距离。

将“十字光标”放置到对象处,在第一点位置点击鼠标左键,然后拖移至第二点。



第一个数字 (22) -柱总数,第二个数字 (111) - 垂直距离点,第三个数字 (1.2659) - 第二点的买价。


***

F12按键可以调出柱图表前进。

这个功能对创建和检测交易策略都有很大的帮助。只是在历史的最前端打开图表(按键 &laquo;Home&raquo;) 并出现柱图表。



按键Shift+F12 使柱图表后退。


***

在图表中可以显示平仓和删除挂单。

进入“终端”窗口中的“账户历史”并用鼠标左键拖移定单到图表中。您必须从服务器上下载已选定单的历史货币对。如果拖移的定单到不同货币对图表中,图表会选择性地接收。
在图表中能够显示开仓,平仓和趋势线交叉部分。在开仓的价格图表中会显示 Stop Loss和Take Profit水平。



如果在拖移时按Shift键,那么在图表中会显现“账户历史”中所有已选定单的仓位。


***

没有必要记住挂单的放置需要什么条件。

您可以在图表中想要放置挂单的点上和菜单中选择“交易”命令,点击鼠标右键即可。在这里您能够看到可以放置的类型。



在选择一种类型定单之后会开启创建/修改定单窗口。只显示Stop Loss 和/或 Take Profit.
标注

可以放置以下四个类型:
  • Buy Limit — 当前价格水平高于定单放置水平。
  • Buy Stop — 当前价格水平低于定单放置水平。
  • Sell Limit — 当前价格水平高于定单放置水平。
  • Sell Stop — 当前价格水平低于定单放置水平。


***

改变Stop Loss 和/或 Take Profit 可以在定单的此处双击。



在这之后会弹出一个窗口,输入设定值。





***

如果您在无意间删除了某些对象,使用 Ctrl+Z便可还原。





***

偶然间关闭了图表,您可以通过菜单中 &laquo;文件 -> 打开删除&raquo;打开原有状态的图表。





***

打印图表可以使用 Ctrl+P。

默认打印的图表为黑白色,但也可以彩色打印。打印彩色图表必须在图表菜单中选择&laquo;服务器 -> 设定&raquo; 选择彩色打印。









创建: 2008.01.30  创建人: MetaQuotes Software Corp.
金币:
奖励:
热心:
注册时间:
2006-7-3

回复 使用道具 举报

 楼主| 发表于 2008-5-25 07:00 | 显示全部楼层
新手在交易中的10个基本错误 [ en | ru ]
  • 在市场刚开始时交易

    在开市的前几分钟里,行情经常会突然变化或爆涨。有经验的交易者有时会凭借他们的知识,尝试预测行情变化的趋势。但是对于新手来说还是别试为妙。
  • 获利时不适当地仓促

    好,你开了一个长仓。两天后,你愉快地平仓并检查自己赚了多少钱。可是你稍后发现,这把强有力的上涨行情才刚刚开始。所以,如果你不是这么仓促,你可以多赚10倍的钱。只有在非常的场合才会使用获利定单,一般是阻力位非常明显的时候。一般离场最好还是使用止损或追踪止损定单。
  • 在损失的时候追加投资

    这是一个相反的例子: 你开了一个长仓,但是价位在下跌。你固执地认为 "还会再涨回去的,我只是过早开仓了" ,并且又追加投资。但是价格继续下跌,你的损失也被加倍。记住:你只有在获利的时候才能追加投资。
  • 从最好的仓位开始平仓
    如果你有一些长仓而价格开始下跌,你经常会本能地处理掉获利的仓位,然后才平掉损失的仓位(或者等到它触发止损)。这是一种错误的策略:如果整个行情开始下跌,这些已经亏损的仓位可能是你损失最大的部分,这意味着你应该首先平掉这些仓位。好的仓位则不会下跌得很快,反过来说,他们也有可能再次上涨。所以不要匆忙平掉获利的仓位。
  • 翻本心理

    一个新手会犯的典型错误:一个亏损的仓位刚被平掉 - 为了弥补错误他又热切地开了一个新的仓位。这会造成一个新的亏损结果,所以亏损后不要立即进入市场,休息一下吧。
  • 最优越的仓位

    合理地处理你的仓位:不要只特别关心其实的几个。比如,那些你在最低价买进的 - 每一个交易者通常都会为此感到骄傲。而你也可能自我陶醉,但是请小心,不要让如此漂亮的操作最后无利可图,甚至亏损。
  • 用永远买进的规则进行交易

    你在开头行情时开仓,然后行情飙升。这时你对自己说:"啊,我抓到牛市了",于是"永远地"搁置这个仓位。但是有些事并不是偶尔才发生的:你不是长时间地考虑是否要改变投资,就是只能在短期内遵守标准的规则,规则会使你进出市场,即使这是一个强有力的走势。不要"嫁给"你的仓位。
  • 在第一天就平掉获利的仓位

    反之亦然,如果你的交易不是只有一天,不要在无条件地就在第一天平掉有利可图的仓位。就算价位已经非常高了,耐心点:明天会更高。
  • 当发出建一个相反的仓位警示时平仓

    许多系统交易连续进入市场。这些系统通常都是持仓的。这就意味着,为了建一个短仓就平掉一个长仓。有人能够利用这个方法,但必须更早的平仓:平仓的价位必须高于建仓的价位。
  • 犹豫

    如果对你先前的估计不确定的话,你不应该进行交易。对自己说"我得了多疑的毛病",你最好平掉所有的仓位,并重新分析走势。或者出去散散步。这最后的建议对于困难案例是很实际的,顺便说一下,这对所有的事情都会有帮助的 - 尝试一下吧!




创建: 2006.12.05  创建人: Collector
金币:
奖励:
热心:
注册时间:
2006-7-3

回复 使用道具 举报

 楼主| 发表于 2008-5-25 07:01 | 显示全部楼层
交易策略 [ en | ru ]

所有的交易分类都是完全随意的。下面这种分类强调从交易的基本概念上分类
  • 根据走势

    根据走势的策略等待与所建仓位同方向的价位变化。这样,我们假设走势会保持这个方向变化。当根据走势交易时,我们永远不能在最高价附近卖出或在最低价附近买进,因为这些重要价位被作为走势启动的信号。所以,使用这种系统,交易者总是忽略价位变化的开始阶段,并错过获利的重要阶段,知道收到平仓的信号。 如何选择根据走势策略的灵敏性是个主要问题。一个灵敏的系统会在强力走势时更有效的作出快速回应,但也会发出更多的错误信号。一个不灵敏的系统则情况刚好相反。
    许多交易者在任何时候都一次次地尝试赚钱。这就使越来越快地跟随走势的系统被选择。虽然在一些市场里,快速的系统通常比慢的更有效率,但是在大多数市场则刚好相反,在慢的系统中减少的交易亏损和比减少的利益更多。这就是为什么推荐限制寻求更灵敏的系统。在所有的案例中。选择系统的灵敏度都应该基于交易者的经验和各自的目的。根据走势的交易策略是非常多样性的。
    下面是这种类型的主要策略Below are the main strategies of the kind:
    • 基于移动平均线的策略

      当一个上涨行情被下跌行情代替时,价格会和移动平均线顶部往下交叉。同样地,当一个下跌行情被上涨行情代替时,价格会和移动平均线底部向上交叉。在大多数移动平均线的系统中,这些交叉点被考虑作为交易信号。

    • 突破策略

      突破策略下的基本概念是非常简单的:行情有能力达到一个新高或新低价位显示了其在突破方向上的潜在趋势。


  • 逆势策略

    逆势策略指在反向走势时,认为行情会修正,而建立的仓位,等待其产生的重要价格变化。系统在反向走势时往往会吸引投资者的注意,因为他们希望在低位买进或在高位卖出。不幸的是解决这一复杂的任务对系统来说却没有什么吸引力。有一个重要的区别是要我们注意的,跟随走势的系统是自我修正的,而逆势的系统可能会无限亏损。所以,在逆势系统中包含一个保护性的止损是必须的。另外,系统会保持一个长仓在整个长期的下跌趋势或者一个短仓在整个长期的上涨趋势。

    逆势策略最初的优点是它提供了同时使用跟随走势系统时的另一个不同的机会。说到这,必须提到逆势系统还是受人喜欢的,虽然经常会适度地损失点钱。这是因为,逆势系统和跟随走势系统相反,同时使用它们所承担的风险比只使用一个小。同时使用这两个系统在承担同样风险的条件下赚到更多钱的可能非常高,就算逆势系统本身会有亏损。

  • 价格行为的模型辨识

    所有的系统在某种意义上来说,都能被作为模型辨识的系统分类。最终,获得信号而跟随或逆向新建仓位也是一种价格模型。然而,这就意味着作为走势跟随系统或逆势系统,选择模型不是首先基于价格的走势方向。
    当需要决定交易时,这类系统有时可能会使用模型。既然这样,研究院将根据他们的行为,尝试确定一个假设价位上涨或下跌之前的模型。这种行为模型被用来作为评估当前行情上升或下跌的可能性。
    值得注意的是,上述的策略不能明确地被区分开。修改后,该系统可以区别与其他类型了。

  • 在通道里交易

    在通道里交易是指根据阻力线和支撑线确定交易的趋势,线是指通道的边界。这种策略对横向走势非常有用,但对上升走势和下降走势几乎没用。在通道里交易如下图所示:


    在下述规则下应该新建仓位:
    • 确定支撑位和阻力位。一个正确的计算对于确定行情移动的通道边界是非常有帮助的。
    • 一旦价格到达通道的边界并跳回相反方向,应该立即新建长仓。如果价位到达阻力位应该新建短仓。
    • 一旦价格到达相反的边界,就应该平仓。必须注意的是在价格到达通道边界之前也可能发生逆转,所以也可以在支撑位或阻力位之前平仓。
    这种交易的优点是当连续的横向走势时,通过几次建仓和平仓可能获得最大的利益。主要的缺点是一旦突破通道可能致使不可预测的损失。为了消除缺点,当市场与计划中的走势相反时,需要设置一个适当的止损来平掉亏损仓位。




创建: 2006.12.05  创建人: Collector
金币:
奖励:
热心:
注册时间:
2006-7-3

回复 使用道具 举报

 楼主| 发表于 2008-5-25 07:02 | 显示全部楼层
MetaTrader 4 客户端内的智能交易测试: 内部模式 [ en | ru ]

如果您还没有开启测试,在执行测试前打开 "测试"窗口。执行测试有以下几种方法: 进入"查看-策略测试" 主菜单,按 Ctrl+R键,在工具栏中点击 "策略测试",使用图表的上下菜单将智能交易添加到图表中("智能交易-策略测试")或按 F6。
开始测试之前,需要选择智能交易。可以从弹出的窗口中选择或使用鼠标从“导航”窗口拖至“测试”窗口。测试的货币对同样可以通过这种方法选定:在弹出的窗口中选定或从“市场观察”窗口拖出。按键 F6 可以同时选择智能交易、货币对和激活图表周期,但是智能交易必须添加到激活的图表中。
我们必须选择一种历史数据模式 方法。一些交易策略与柱状的价格变动是处于独立的状态,它们是在已成型的柱状图上交易。一个新柱的测试文件显现说明当前柱已经完成模式。一些智能交易也会通过 "仅用开盘价"的模式模式化。值得说明的是,如果当前柱的数据使用到智能交易的交易的决定上,那么这些智能交易测试使用“仅用开盘价”将是远远不够的!通常,智能交易运行完成的柱含有以下代码去检验下一个柱:
static datetime prevtime=0;...if(prevtime == Time[0]) return(0);prevtime = Time[0];所有其他的情况下必须使用“每个替克”模式。通常不建议使用“控制点”模式。这种模式是对于在优化模式中智能交易运行的天然估测。在 优化的基因演算 添加到策略测试以后,需要使用“控制点”模式。使用每个替克模式测试仅有历史数据是远远不够的,还需要一分钟可用数据。数据的数量是越多越好。如果没有一分钟的可用数据,五分钟的可用数据也可以使用到模式化中。如果同样没有五分钟数据,十五分钟数据同样可以使用等等。 当然,这样质量会有所降低。
当点击“开始”后, 首先将会生成改变价格的测试次序,这些将存储到 FXT 延伸文件中。 全部 FXT 文件存放在<client_terminal_dir>\tester\history 目录和类型名称SSSSSSPP_M.fxt 如下:
  • SSSSSS - 测试的货币对;
  • PP - 一分钟内测试货币对时间周期值;
  • M - 测试模式(0 - "每个替克", 1 - "控制点", 2 - "仅用开盘价")。
在 FXT-文件标题中写出当前护壁对的设定和当前账户的设定。客户端会自动从交易服务器中获取这些设定信息。因此,真实服务器功能将同样被测试:调用保证金的计算, 佣金,税金等等。如果当前没有连接,那么最后的设定将使用到交易服务器上,客户端的最后链接。 当按开始按钮时,FXT文件每次都会格式化。现在出现了问题:如果每次都需要格式化,为什么使用该文件?首先, 很多替克数据不能够与计算机的 RAM融合。因此,出于优化目的外部储备的大量数据是非常重要的。其次,我们可以检验测试生成的次序。在定单中可以独立打开文件查看价格柱的模式发展。



那么,为什么要重新计算已经存在的数据呢?
  • 首先,经常性的需要在最后的历史数据上测试。
  • 其次,经常出现每个替克的初始形成数据在较短的时间期限内不能够从服务器下载生成测试顺序。问题在于数据的抽取是异步的。因为服务器不会通知客户所请求的数据已经传送。但我们可以确定的是所有请求的数据会在一分钟到两分钟内接收到。
  • 第三是最重要的一点。用户的账户拥有不同的经纪商。不同的经纪商提供的不仅仅是不同的交易状态(请保留含有同时交易服务器运行重要信息的 FXT-文件标题), 在历史数据成交量和质量上也存在差别。这种情况下,在切换账户测试时,建议重新计算数据。
  • 第四, 在客户端内经常没有来自不同可用源代码的不同时间期限数据。在客户端为基本货币对提供大量历史下载数据以后,问题变得更加严重。很多交易者使用真实的经纪商交易,从MetaQuotes服务器上下载数据。 这点对于模式化的质量起着决定性的作用。需要注意的是测试考虑对于不同时间期限数据不一致的错误。那么这是些什么样的错误呢?
如果使用日期“起始”和“截至” ,必须清楚测试形成的顺序(必须检验“使用日期”的相关栏)。测试的开始时间没有按照“起始”日期。在开始生成替克之前,在准备模式化的柱中在测试顺序前端的接近 4千左右的柱被略过。如果初始柱较少,历史前端的所有柱都会使用。但这些柱的数额不少于 100。因此,如果 "起始"日期非常接近整个历史的起点,替克生成可能会在指定日期后开始。为此,在测试开始以前我们提供最少100个柱。在生成顺序中的初始柱需要帮助智能交易在先前数据的基础上正确计算指标 (特别是移动平均数)。 下面是一个起始时间设定为2007.08.01模式替克生成的顺序 :
当到达“截至”日期时,模式化结束。从截至日起的 0:00 点开始价格数据退出测试和生成顺序。如果指定数据超出历史范围或无效“使用日期”, 全部历史 (前 100 个柱除外)将介入生成。图表中柱的最多数额设定并不意味着全部模式化 - 使用存储在硬盘上的全部历史。


如果在测试顺序生成期间历史数据少于100 个柱,在测试日志中将会显示 "TestGenerator: deficient data"并且不会开启测试。如果日期范围指定错误,可能没有任何数据显现。在测试日志中也将会显示"TestGenerator: no history data"信息。这种情况下,必须确定提供的历史数据总数。确保这些数据能够打开相应图表并且使用PageUp键手动抽取数据,随后“重新计算”并重新开始测试。


在开始测试之前,必须指定智能交易测试的进入参量。特别要注意货币存款额。例如,如果不指出RUB,一个 micex类型的账户打开,在GAZP上的智能交易测试将没有任何结果 (这个货币可以手动指出):



如果在智能交易中 外部变量 显示,“输入数据”将会隐藏。输入数据值得不通社之被保存在不同名称的设置文件中 ("保存"键)和备用("加载"键).



点击 "修改智能交易"键将会调用 MetaEditor,智能交易测试可以打开编辑。在测试开始时该键被锁定。不过, MetaEditor 仍然可以进行编译智能交易,甚至是测试在运行中。在下次开始测试时,重新编译的智能交易将自动重新加载测试。

智能交易测试期间有很好的记录功能,无需重新加载。 建议在测试期间改变智能交易的源代码可以节省您的时间。测试完成之后,您可以点击“开始”键再次测试已经修改的智能交易。但不是先前加载的执行文件将被测试。重新加载新版本的智能交易,您需要奠基“停止”键或者等待测试的完成。只有在这之后,在MetaEditor中开始重新编译你的智能交易。

在测试完成之后,您可以打开带有交易业务箭头的图表和测试期间的指标。不过,测试期间使用的指标将以默认颜色显示。例如,如果使用不同时间周期平均数的移动平均数,它们全部以红色显示。当然这样很不方便。这个颜色可以进行手动改变,不过还有其他的解决方法。如果可以提前命名带有附加指标的模板为 <expert_name>.tpl (for example, Moving Average.tpl) ,当图表打开测试时会使用该模板。如果没有可用模板,将接受tester.tpl 模板。

这里还需要注意一处细节。如果以上面的方法打开测试图表,当前历史数据将被加载进入。如果已经包含测试顺序,没有任何问题。如果使用的数据是其他数据提供呢? 很遗憾,测试策略会支持所谓的策略测试直观化。




如果检测“直观化”,使用 <expert_name>.tpl 或 tester.tpl模板“调试”图表将自动从服务器中打开。图表会显示当前测试顺序的状态。通过滑动的方法可以改变直观化的比率。如果向左移动,比率降低。如果向右移动,比率加快。使其停顿,可以按 "||" 按钮或者键盘上的 Pause键。停顿之后继续测试,需要按 ">>"按钮或再次按 Pause键。测试停顿时,可以通过 F12 一步一步地手动直观化。 加速使用 "+" 按钮,减速使用"-"按钮。指定日期可以点击"跳至"。这种情况下,直至测试到达指定日期都无需重新绘制图表,本质上加快了进程。 测试结束后(或是通过点击“停止”),历史数据将会显示在图表上。
查看测试图表,可以通过鼠标双击相应的部分得到对应结果。如果测试图表已经打开 (检测"直观化"或点击 "打开图表"),在“结果”栏中双击将移动至相应的日期。
优化交易策略, 至少需要两步完成。在“设置”栏中检测“优化”并设定初始值和最终值。在智能交易属性窗口“输入数据”栏改变优化参量的增加值。



如果智能交易没有任何输入数据,则不能够进行优化。优化的过程可以提高优化限定设置。



当达到相应的限定后,测试停止通过参量。测试开始新(下一个)输入数据的设定。另外,如果因为限定而终止参量通过,优化视为失败并且不会列出结果。负值赢利同样视为失败。为了使没有通过的参量不在优化结果的列表中出现,需要在“优化结果”栏的上下菜单中选择“忽略无效结果”。
经常性由于类似“策略优化没有运行”的原因,以默认的方式列出失败结果。这种情况下,在日志内将会显示 "NNN results have been discarded as insignificant" 信息。
要加快优化的进程,需要实现结果存储。如果重复优化通过参量,测试在当前输入数据设定的存储结果中找到,找到结果会被使用。这样,优化可以停止运行,因为在下一个智能交易的相同数据优化开启时将允许从先前计算结果和继续计算结果中获得。如果测试数据已经改变、智能交易重新编译或者智能交易使用的数据库被替换,优化结果将被重新设置并且在此进行计算。
测试不能够控制水平2或更高数据库的改变 (即,数据库调用其他数据库)! 这就是在一些情况下需要手动重设存储的原因。例如,智能交易的重新编译。包含存储数据的文件被保存在 tester\caches 目录中。

基因演算 开启后,对于优化结果存储会起到帮助作用。在智能交易的属性窗口的“测试”栏中可以开启优化基因演算。



基因演算的参量被自动指定
  • 总体的数量取决于全部可结合参量的总数,并且其值在64 到256之间。
  • 最少生成总数取决于总体大小,并且其值在15到31之间。
  • 因此,最少基因优化通过总数在 960到7936的范围之内。
  • 交叉的可能性为100%。基因随意偶然交叉,不排除自身交叉。
  • 变化的可能性为10%。
  • 反方向的可能性为10%。
  • 如果基因库在10代之后没有改进,基因优化将会停止。需要具备最少基因代形成数量。
测试日志在目录 \logs中被锁定。 文件本身含有延伸 .log。每天有存在相应单独的 log 文件。测试 log会在5天之内自动删除。如果从“日志”的上下菜单中选择 "清除全部日志",该栏的当前内容将被删除,所有 log 文件将被移除。
测试期间日志内大量数据输出在“日志”栏内可能不会得到完整的信息,但是可以确定它们进入 log 文件。优化过程中日志内没有输出数据提供。
测试完成后,可以删除不再继续使用测试业务的数据。腾空数据,可以在主菜单中关闭“测试”窗口或 Ctrl-R 再者在工具栏中点击“策略测试”。

转自俄罗斯MetaQuotes Software Corp.
原文: http://articles.mql4.com/ru/172

创建: 2008.05.01  创建人: Slawa Starikoff
金币:
奖励:
热心:
注册时间:
2006-7-3

回复 使用道具 举报

 楼主| 发表于 2008-5-25 07:03 | 显示全部楼层
在 MetaTrader 4 中比较基因演算方法和简单搜索 [ en | ru ]

1. 什么是基因演算方法?在 MetaTrader 4 交易平台中提供基因演算优化智能交易的输入数据。这样做能够避免任何无意义的测试且减少优化的时间 。基因演算的主要作用描述在文章 基因演算方法: 数学运算 中提供。
本文提及到的内容,使用基因演算优化智能交易输入数据与直接简单搜索获取值进行比较。
2. 智能交易在文章定单管理就是这样简单中,我通过智能交易 CrossMACD完成了实验:
  • 添加止损和赢利到仓位。
  • 添加追踪止损
  • 使用 OpenLuft 参量为过滤信号:如果零线在总点数中间穿过信号将到来。
  • 添加 CloseLuft参量位同样关闭的过滤信号。.
  • 在较快的时间周期上放入外部变量并且使用快速移动平均数计算 MACD 。
现在基本上是个完整的智能交易。这个智能交易的优化和在交易中的使用都很方便。您可以下载智能交易 CrossMACD_DeLuxe.mq4 到您的 PC并且进行独立测试。
3.优化智能交易现在我们来优化智能交易。 三个测试将使用不同的优化搜索总数进行。这样能够帮助我们对比在不同状况下使用基因演算方法获取的盈利。
在每个测试结束后,我会手动移除 测试储存 ,这样做是为了下一次的测试不使用这些已经找到的数据。 移除测试储存是为了试验的结果更加精确 - 通常,自动存储的结果会增加反复优化。

对比测试结果,使用基因演算优化将分为两次: 第一次- 按照命令查找最大赢利 (盈利),第二次– 查找最高的赢利因素(赢利因素)。 另外,两种优化方法的三个最好的结果将会在总结报告表格中列出。
本文的优化是纯粹的实验。文章的目的在于找到输入数据创造更大的赢利。

测试 1
  • 图表货币对– EURUSD;
  • 图表时间周期 – Н1;
  • 测试周期 – 2 年;
  • 模式化 – "只限开盘价";
  • 在输入数据中查找:

变量名称
初始值
阶段
最终值
StopLoss
0
10
100
TakeProfit
0
10
150
TrailingStop
0
10
100
OpenLuft
0
5
50
CloseLuft
0
5
50
搜索数量
234256

需要注意的是在使用基因演算时,优化的预期时间 大致要与优化使用的直接输入数据搜索相同。 不同的是基因演算会在屏幕上连续地显示不成功的字样。这样,需要几次减少测试的总量(可能是几十次,百次,千次)。这就是当使用基因演算时,你不应该确定预期时间的原因。在真实的优化过程中时间总是较短:



直接搜索


基 因 演算

正如我们看到的,使用基因演算的少于4分钟代替了预期时间的5个半小时。


使用基因演算的优化图表同样不用于直接搜索的图表。因为不好的组合已经筛出,随后的测试组合被默认为更有盈利的输入数据。这是图表差额走高的原因:




让我们来仔细看看两个优化结果的细节。

结果表格:



直接搜索
基因演算
总优化时间
4 小时 13 分28秒
3 分 50 秒

SL
TP
TS
Open Luft
Close Luft
Profit
SL
TP
TS
Open Luft
Close Luft
Profit
1
70
140
0
20
30
1248.08
70
140
0
20
30
1248.08
2
70
140
0
20
35
1220.06
70
140
0
20
35
1220.06
3
70
150
0
20
30
1176.54
70
150
0
20
30
1176.54

SL
TP
TS
Open Luft
Close Luft
Profit Factor
SL
TP
TS
Open Luft
Close Luft
Profit Factor
1
100
50
40
50
5
4.72
0
50
40
50
5
4.72
2
90
50
40
50
5
4.72
90
50
40
50
5
4.72
3
80
50
40
50
5
4.72
80
50
40
50
0
4.72
从图表的对比中我们明显地看到,使用基因演算的优化要比直接搜索的结果快十倍! 其优化结果也相同。这几个结果的最大赢利为 4.72。这就就是不同输入数据的组合报告, 但是不重要了。
现在我们来尝试减少搜索的总数,但是增加测试的时间。我们这次将使用 "全部替克"模式。
测试 2
  • 图表货币对 – EURUSD;
  • 图表时间周期– Н1;
  • 测试周期 – 2 年;
  • 模式化 – "全部替克";
  • 在输入数据中查找:

变量名称
初始值
阶段p
End Value
StopLoss
0
10
100
TakeProfit
0
10
150
TrailingStop
0
10
100
OpenLuft
0
10
50
Number of searches
11 616

结果表格:



直接搜索
基本运算
优化时间总数
32 小时 32 分 37秒
1 小时18 分 51秒

SL
TP
TS
Open Luft
Profit
SL
TP
TS
Open Luft
Profit
1
50
0
0
20
1137.89
50
0
0
20
1137.89
2
70
0
0
20
1097.87
70
0
0
20
1097.87
3
60
0
0
20
1019.95
60
0
0
20
1019.95

SL
TP
TS
Open Luft
Profit Factor
SL
TP
TS
Open Luft
Profit Factor
1
50
90
60
50
4.65
50
90
60
50
4.65
2
50
140
60
50
4.59
50
140
60
50
4.59
3
100
90
60
50
4.46
70
90
60
50
4.46

对于这样的搜索总数,优化的比率的差别在 25 倍 不算是个坏结果。其测试结果百分百重合,唯一不同的是第三次通过的止损。赢利因素依然最大。 赢利因素依然最大。
现在我们来尝试增加搜索总数,减少测试时间。这次我们使用 "控制点"模式。

测试 3
  • 图表货币对 – EURUSD;
  • 图表时间周期 – Н1;
  • 测试周期 – 2 年;
  • 模式化 – "控制点";
  • 在输入数据中查找:

变量名称
初始值
阶段
最终值
StopLoss
0
10
100
OpenLuft
0
5
50
CloseLuft
0
5
50
搜索总数
1 331
结果表格:



直接搜索
基本运算
优化时间总数
33 分 25 秒
31 分55 秒

SL
Open Luft
Close Luft
Profit
SL
Open Luft
Close Luft
Profit
1
0
0
45
1078.03
0
0
45
1078.03
2
70
20
15
1063.94
70
20
15
1063.94
3
70
20
25
1020.19
70
20
25
1020.19

SL
Open Luft
Close Luft
Profit Factor
SL
Open Luft
Close Luft
Profit Factor
1
80
50
15
2.73
80
50
15
2.73
2
70
50
15
2.73
70
50
15
2.73
3
90
50
15
2.65
90
50
15
2.65
这次的情况有所改变。 优化周期吻合并且结果也是一致的。这个结果可以通过优化搜索仅 1331组成来解释。使用基因演算这些通过总量是远远不够的。基因演算没有时间"快速启动" - 优化快速是由于已经筛出不好的组合。但在上面的组合总数中,基因演算不能区分“父母”(输入数据组合)而生成差的“子代”。所以,没有想法使用它们。

4. 结论在МТ 4 策略优化中添加基因演算是个不错的工具。 优化有了显著的提高。如果搜索的总数超大,结果会定期进行优化。


现在我们有理由相信没有必要使用全面的数据搜索。使用基因演算将更快得到结果并且质量没有差别。


5.编后记写完这篇文章之后,好奇心驱使我开启优化
CrossMACD_DeLuxe 全部收入数据。
总数的组合接近
一个亿(103 306 896)。
使用基因演算优化仅用17小时
使用搜索数据的方法需要将近 35 年
(301 223 小时).


您这样可以自己的结论。

转自俄罗斯 MetaQuotes Software Corp.

附件:
CrossMACD_DeLuxe.mq4 (6.7 Kb)
创建: 2008.04.18  创建人: Andrey Khatimlianskyi
金币:
奖励:
热心:
注册时间:
2006-7-3

回复 使用道具 举报

 楼主| 发表于 2008-5-25 07:04 | 显示全部楼层
基因演算规则:数学运算 [ en | ru ]

基因演算使用于智能交易的数据优化。 这些用途的范例是一个神经网络的学习,即, 这样的值得到的误差最小。基因演算是以随机搜索的方法为基础的。 随机搜索的主要问题在于我们不能够预测解决问题所需要的时间。为了避免浪费时间,他们运用生物创建的方法,即,方法在研究过程中的起源和革新。在革新过程中只有最适合的东西会留下来。结果是这种运算方法能够适应环境状态的调整。
这种基因演算最早是由美国密西根大学的 John H. Holland于1975发现的。该算法被命名为 Holland'的再生计划。这基本上是基因演算方法的全部类型。 我们需要近距离地研究这个计划,将讨论如何将基因演算规则使用到代码的重新编译上。
介绍对象
我们从生物学的特点得知,任何生物体都有自己的典型代表, 就是说,在真实世界上的每个物体都具有本身的基因性, 这个基因性包含该物体的全部信息。在每个典型代表上都会反映每个基因的信息。因此,要解决我们的问题,需要知道现存的物体的模式是否适合使用基因演算。基本演算机制的将来函数在典型代表的基础上,可以避开物体内在的信息,从而对于不同的任务广泛地使用演算。
比特字串符被广泛地使用于物体基因的基因演算中。 因为,每一个物体基因 都能够代表物体相应的特性。基因是一个固定长度的比特字串符表示这个特性值。
整数编码特性最简单的代码方法是使用它的比特值。使用这种方法就可以很简单地执行。因为一个基因的中心长度足以表示特性的一些值。但是,这种方法也存在缺点。主要是由于周围的数字号码不同于几个比特值。比如, 7和 8在比特的显示上不同于4个仓位,这种情况就使基因演算很难继续运行。为了避免这个状况的发生,最好选择使用周围数字号码和代码差距较小的仓位,最理想的是相同值。在真实的基因演算中一些可用的 代码为 Gray 代码。这些可用 Gray 代码值在以下的表格中给出:

二进制代码Gray代码十进制代码二进制代码十六进制代码十进制代码二进制代码十六进制代码000000h000000h100011h100011h200102h300113h300113h200102h401004h601106h501015h701117h601106h501015h701117h401004h810008h121100Ch910019h131101Dh101010Ah151111Fh111011Bh141110Eh121100Ch101010Ah131101Dh111011Bh141110Eh910019h151111Fh810008h
表格1. 相互协调的十进制编码和Gray编码.
所以,当代码为整数特性时,我们将其分成四元组并按照Gray代码规则传送每个四元组。
在真实的 基因演算过程中,通常不需要传送特性值到基因值中。 实际执行中要注意相应的基因值必须找到特性值。
因此,在整数特性基因值的解码问题上就显得很微不足道了。
浮点编码特性最简单的代码方法是使用它的比特值。在浮点代码特性中使用这种方法的缺点与整数代码特性相同。所以我们要按照以下列出的次序执行:
  • 特性允许值的整个间隔时间分为期待精确值部分。
  • 基因值作为整数号码时间间隔使用 (使用Gray代码 )。
  • 间隔时间的中间数字用作参量值。
我们现在通过范例来了解以上介绍的执行次序:
我们假设特性值得范围在[0,1]之内。该范围为代码被分裂成 256时间间隔。编码这些数字,我们需要8个比特。比如,基因值为 00100101bG (大写字母 G 表示Gray代码)。首先使用 Gray 代码,找到相应的间隔时间数字: 25hG->36h->54d。现在,我们来检测什么样的间隔时间与其相对应。通过简单的计算,我们得到的间隔时间为 [0,20703125, 0,2109375]。 即, 参量的值将为 (0,20703125+0,2109375)/2=0,208984375。
非数字数据编码在编译这些非数字数据编码之前,我们必须把它转换成数字。在本网站上有相关的文章-使用神经网络描述。
如何由对象的基因确定它的典型代表确定对象的典型代表 (对象的特性值),我们需要知道与这些特性相对应的基因值 (对象的基因类型)。基因的完整描述表现在物体基因类型的染色体。在一些实践中被称为标本。 因此,在基因演算的实践中,染色体代表的是一个固定长度比特字符串。字串符的间隔与基因相对应。在染色体内的基因长度可以相同也可以不同。 要经常性地使用相同长度的基因. 现在我们来看看染色体的范例和其值的解析。对象有5个特性,每一个特性编码基因元素的长度为4个。那么,染色体的长度为 5*4=20 比特:
00101010100101001101

我们现在可以确定特性值
特性基因值二进制值特性小数值特性特性 1001000113特性 21010110012特性 31001111014特性 4010001117特性 5110110019
基因演算的基本运算符众所周知,在演变的理论中原有特性对新生事物的遗传影响很重要。在基因演算中, 基因运算符的交叉 使用到改变染色体的程序中。这种运算操作存在以下几种方法:
  • 选择两个普遍的单元作为母体;
  • 确定转折点(随意);
  • 确定子体作为第一和第二母体的联系部分。
我们来看看这些运算符函数
染色体_1:0000000000
染色体_2:1111111111
假设转折点放置在第三染色体后,那么:
染色体_1:0000000000>> 0001111111结果_ 染色体_1
染色体_2:1111111111>> 1110000000结果_ 染色体_2

那么结果染色体可能被确定为 0.5作为子体。
另外一个运算符是维持运算的变化。被称作变种运算符。这个运算符可以从它的初始状态再染色体中改变其值。相应地,每个比特在染色体中从中心位置倒序排列。
另外,还有一个运算符,被称为倒装运算符 使用在基因演算中。它将染色体分为两个部分并改变染色体的位置。简单地代表如下:
0001111111>> 1111111000

理论上,这两个基因运算符已经可以完成基因演算的操作。不过在实际操作中还需要添加一些运算符,并且对现有的两个运算符做适当的修改。例如, 在基因演算中不可能只有一个交叉点 (如上所述),但是同样可以有多个交叉点。这种情况下,需要创建几个转折点 (通常是两个)。另外,倒装运算符的执行必须是在染色体种选择比特之后随意地使用执行。

基因演算的流程图现在,带着上面的知识我们来解释一下基因值。我们讨论基因演算的函数何在。近距离地观看基因运算的流程图和它的古典表示法。
  • 初始化开始时间, t=0. 由k单元随意组成的初始化母体 。 B0 = {A1,A2,…,Ak)。
  • 计算每个单元的合适性, FAi = fit(Ai), i=1…k, 然后进入母体, Ft = fit(Bt)。这个函数的值在一定程度上确定适用于描述的染色体,并能解决问题。
  • 在母体中选择Ac单元。 Ac = Get(Bt)。
  • 在母体的中心概率选择第二个单元 (Pc概率的交叉点), Аc1 = Get(Bt),并执行交叉运算符, Ac = Crossing(Ac,Ac1)。
  • 执行变种运算符( Pm概率的变种), Ac = mutation(Ac)。
  • 执行倒装运算符 ( Pi概率的倒装), Ac = inversion(Ac)。
  • 获取新的染色体到新的母体中,插入(Bt+1,Ac)。
  • 步骤 3 到 7 可以重复 k次。
  • 增加当前时期的数字, t=t+1.
  • 如果遇到停止,终端会停止作业。返回至步骤2。
一些运算的步骤还需要周密的计划和考虑。
步骤 3和4,选择染色体的母体步骤在函数的成功运算中扮演着最重要的角色。 对于这个步骤可能有多种多样的选择。最经常使用的方法被称作一般旋轮线 。 当使用这种方法时,这些或那些染色体的概率将会选择确定为它的合适性,即, PGet(Ai) ~ Fit(Ai)/Fit(Bt)。这种方法使用的结果可能会导致子体的单元生成概率的过量。另外一种经常使用的方法是淘汰赛。 它包括几个单元(通常2个)。在母体中随意地选择。最适合的单元将被使用。在一些运算的实施中,会使用名称为 菁英策略,说明保证进入母体的为最优秀的单元。 这种算法常常会加速基因演算的汇合。该策略的缺点是可能增加运算在最小地方点获取值。
确定运算停止的标准同样非常重要。演算函数的时期限定或演算汇合的确定(通常,当参量确定后,在几个时期内比较母体的适合性) 都需要使用一些尺度。

创建: 2008.04.08  创建人: MetaQuotes Software Corp.
金币:
奖励:
热心:
注册时间:
2006-7-3

回复 使用道具 举报

 楼主| 发表于 2008-5-25 07:05 | 显示全部楼层
如何评估智能交易测试结果 [ en | ru ]

首先,我们来谈谈测试程序。在测试开始之前,测试的子系统加载智能交易,设定用户指定的先前参量并且调用init()函数。随后通过生成次序测试开始,并且每次都会调用 start()函数。当测试的次序耗尽,会调用 deinit()函数。这样,整个交易历史在测试期间产生测试数据。在此时这个智能交易的效率可以进行分析。

CalculateSummary函数提供以下测试结果计算,即,在策略测试的标准报告中给出数据。

void CalculateSummary(double initial_deposit)  {   int    sequence=0, profitseqs=0, lossseqs=0;   double sequential=0.0, prevprofit=EMPTY_VALUE, drawdownpercent, drawdown;   double maxpeak=initial_deposit, minpeak=initial_deposit, balance=initial_deposit;   int    trades_total=HistoryTotal();//---- 初始化总结   InitializeSummaries(initial_deposit);//----   for(int i=0; i<trades_total; i++)     {      if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue;      int type=OrderType();      //---- 不考虑初始差额      if(i==0 && type==OP_BALANCE) continue;      //---- 计算赢利      double profit=OrderProfit()+OrderCommission()+OrderSwap();      balance+=profit;      //---- 检测借款      if(maxpeak<balance)        {         drawdown=maxpeak-minpeak;         if(maxpeak!=0.0)           {            drawdownpercent=drawdown/maxpeak*100.0;            if(RelDrawdownPercent<drawdownpercent)              {               RelDrawdownPercent=drawdownpercent;               RelDrawdown=drawdown;              }           }         if(MaxDrawdown<drawdown)           {            MaxDrawdown=drawdown;            if(maxpeak!=0.0) MaxDrawdownPercent=MaxDrawdown/maxpeak*100.0;            else MaxDrawdownPercent=100.0;           }         maxpeak=balance;         minpeak=balance;        }      if(minpeak>balance) minpeak=balance;      if(MaxLoss>balance) MaxLoss=balance;      //---- 仅限市场定单      if(type!=OP_BUY && type!=OP_SELL) continue;      SummaryProfit+=profit;      SummaryTrades++;      if(type==OP_BUY) LongTrades++;      else             ShortTrades++;      //---- 亏损交易      if(profit<0)        {         LossTrades++;         GrossLoss+=profit;         if(MinProfit>profit) MinProfit=profit;         //---- fortune changed         if(prevprofit!=EMPTY_VALUE && prevprofit>=0)           {            if(ConProfitTrades1<sequence ||               (ConProfitTrades1==sequence && ConProfit2<sequential))              {               ConProfitTrades1=sequence;               ConProfit1=sequential;              }            if(ConProfit2<sequential ||               (ConProfit2==sequential && ConProfitTrades1<sequence))              {               ConProfit2=sequential;               ConProfitTrades2=sequence;              }            profitseqs++;            AvgConWinners+=sequence;            sequence=0;            sequential=0.0;           }        }      //---- 赢利交易(profit>=0)      else        {         ProfitTrades++;         if(type==OP_BUY)  WinLongTrades++;         if(type==OP_SELL) WinShortTrades++;         GrossProfit+=profit;         if(MaxProfit<profit) MaxProfit=profit;         //---- fortune changed         if(prevprofit!=EMPTY_VALUE && prevprofit<0)           {            if(ConLossTrades1<sequence ||               (ConLossTrades1==sequence && ConLoss2>sequential))              {               ConLossTrades1=sequence;               ConLoss1=sequential;              }            if(ConLoss2>sequential ||               (ConLoss2==sequential && ConLossTrades1<sequence))              {               ConLoss2=sequential;               ConLossTrades2=sequence;              }            lossseqs++;            AvgConLosers+=sequence;            sequence=0;            sequential=0.0;           }        }      sequence++;      sequential+=profit;      //----      prevprofit=profit;     }//---- 最终借款检验   drawdown=maxpeak-minpeak;   if(maxpeak!=0.0)     {      drawdownpercent=drawdown/maxpeak*100.0;      if(RelDrawdownPercent<drawdownpercent)        {         RelDrawdownPercent=drawdownpercent;         RelDrawdown=drawdown;        }     }   if(MaxDrawdown<drawdown)     {      MaxDrawdown=drawdown;      if(maxpeak!=0) MaxDrawdownPercent=MaxDrawdown/maxpeak*100.0;      else MaxDrawdownPercent=100.0;     }//---- 考虑最后交易   if(prevprofit!=EMPTY_VALUE)     {      profit=prevprofit;      if(profit<0)        {         if(ConLossTrades1<sequence ||            (ConLossTrades1==sequence && ConLoss2>sequential))           {            ConLossTrades1=sequence;            ConLoss1=sequential;           }         if(ConLoss2>sequential ||            (ConLoss2==sequential && ConLossTrades1<sequence))           {            ConLoss2=sequential;            ConLossTrades2=sequence;           }         lossseqs++;         AvgConLosers+=sequence;        }      else        {         if(ConProfitTrades1<sequence ||            (ConProfitTrades1==sequence && ConProfit2<sequential))           {            ConProfitTrades1=sequence;            ConProfit1=sequential;           }         if(ConProfit2<sequential ||            (ConProfit2==sequential && ConProfitTrades1<sequence))           {            ConProfit2=sequential;            ConProfitTrades2=sequence;           }         profitseqs++;         AvgConWinners+=sequence;        }     }//---- 收集完毕   double dnum, profitkoef=0.0, losskoef=0.0, avgprofit=0.0, avgloss=0.0;//---- 连续盈利和亏损的平均数   dnum=AvgConWinners;   if(profitseqs>0) AvgConWinners=dnum/profitseqs+0.5;   dnum=AvgConLosers;   if(lossseqs>0)   AvgConLosers=dnum/lossseqs+0.5;//---- 绝对值   if(GrossLoss<0.0) GrossLoss*=-1.0;   if(MinProfit<0.0) MinProfit*=-1.0;   if(ConLoss1<0.0)  ConLoss1*=-1.0;   if(ConLoss2<0.0)  ConLoss2*=-1.0;//---- 赢利原因   if(GrossLoss>0.0) ProfitFactor=GrossProfit/GrossLoss;//----期待盈利   if(ProfitTrades>0) avgprofit=GrossProfit/ProfitTrades;   if(LossTrades>0)   avgloss  =GrossLoss/LossTrades;   if(SummaryTrades>0)     {      profitkoef=1.0*ProfitTrades/SummaryTrades;      losskoef=1.0*LossTrades/SummaryTrades;      ExpectedPayoff=profitkoef*avgprofit-losskoef*avgloss;     }//---- 绝对借款   AbsoluteDrawdown=initial_deposit-MaxLoss;  }
计算正确,机会得知初始化存款额的值 。这样,在init() 函数中AccountBalance()函数必须被调用,在测试开始时将给出差额。

void init()  {   ExtInitialDeposit=AccountBalance();  }
在上面的CalculateSummary 函数中, 与标准的报告一样,盈利在当前的存款额中计算。其他交易结果,像"最大盈利交易" 或 "最大连续亏损"在赢利基础上计算,同样要测量金钱数。随后重新以点数计算赢利。

...      //---- 仅限市场定单      if(type!=OP_BUY && type!=OP_SELL) continue;      //---- 以点数计算赢利      profit=(OrderClosePrice()-OrderOpenPrice())/MarketInfo(OrderSymbol(),MODE_POINT);      SummaryProfit+=profit;...
使用函数将得到结果写入报告文件中。

void WriteReport(string report_name)  {   int handle=FileOpen(report_name,FILE_CSV|FILE_WRITE,'\t');   if(handle<1) return;//----   FileWrite(handle,"Initial deposit           ",InitialDeposit);   FileWrite(handle,"Total net profit          ",SummaryProfit);   FileWrite(handle,"Gross profit              ",GrossProfit);   FileWrite(handle,"Gross loss                ",GrossLoss);   if(GrossLoss>0.0)      FileWrite(handle,"Profit factor             ",ProfitFactor);   FileWrite(handle,"Expected payoff           ",ExpectedPayoff);   FileWrite(handle,"Absolute drawdown         ",AbsoluteDrawdown);   FileWrite(handle,"Maximal drawdown          ",                     MaxDrawdown,                     StringConcatenate("(",MaxDrawdownPercent,"%)"));   FileWrite(handle,"Relative drawdown         ",                     StringConcatenate(RelDrawdownPercent,"%"),                     StringConcatenate("(",RelDrawdown,")"));   FileWrite(handle,"Trades total                 ",SummaryTrades);   if(ShortTrades>0)      FileWrite(handle,"Short positions(won %)    ",                        ShortTrades,                        StringConcatenate("(",100.0*WinShortTrades/ShortTrades,"%)"));   if(LongTrades>0)      FileWrite(handle,"Long positions(won %)     ",                        LongTrades,                        StringConcatenate("(",100.0*WinLongTrades/LongTrades,"%)"));   if(ProfitTrades>0)      FileWrite(handle,"Profit trades (% of total)",                        ProfitTrades,                        StringConcatenate("(",100.0*ProfitTrades/SummaryTrades,"%)"));   if(LossTrades>0)      FileWrite(handle,"Loss trades (% of total)  ",                        LossTrades,                        StringConcatenate("(",100.0*LossTrades/SummaryTrades,"%)"));   FileWrite(handle,"Largest profit trade      ",MaxProfit);   FileWrite(handle,"Largest loss trade        ",-MinProfit);   if(ProfitTrades>0)      FileWrite(handle,"Average profit trade      ",GrossProfit/ProfitTrades);   if(LossTrades>0)      FileWrite(handle,"Average loss trade        ",-GrossLoss/LossTrades);   FileWrite(handle,"Average consecutive wins  ",AvgConWinners);   FileWrite(handle,"Average consecutive losses",AvgConLosers);   FileWrite(handle,"Maximum consecutive wins (profit in money)",                     ConProfitTrades1,                     StringConcatenate("(",ConProfit1,")"));   FileWrite(handle,"Maximum consecutive losses (loss in money)",                     ConLossTrades1,                     StringConcatenate("(",-ConLoss1,")"));   FileWrite(handle,"Maximal consecutive profit (count of wins)",                     ConProfit2,                     StringConcatenate("(",ConProfitTrades2,")"));   FileWrite(handle,"Maximal consecutive loss (count of losses)",                     -ConLoss2,                     StringConcatenate("(",ConLossTrades2,")"));//----   FileClose(handle);  }
以下给出范例,如何使用这些函数生成报告。

void deinit()  {   if(!IsOptimization())     {      if(!IsTesting()) ExtInitialDeposit=CalculateInitialDeposit();      CalculateSummary(ExtInitialDeposit);      WriteReport("MACD_Sample_Report.txt");     }  }
在上边的范例中,您能够看到报告结果不仅是在测试结束后生成, 智能交易的运作中。您也许会问如果在终端内账户历史没有全部下载(例如,在账户栏中仅下载一个月的账户历史),怎样获取初始存款额的大小呢。 CalculateInitialDeposit 函数将会帮助解决这个问题。

double CalculateInitialDeposit()  {   double initial_deposit=AccountBalance();//----   for(int i=HistoryTotal()-1; i>=0; i--)     {      if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue;      int type=OrderType();      //---- 不考虑初始化差额      if(i==0 && type==OP_BALANCE) break;      if(type==OP_BUY || type==OP_SELL)        {         //---- 计算赢利         double profit=OrderProfit()+OrderCommission()+OrderSwap();         //---- 并减少差额         initial_deposit-=profit;        }      if(type==OP_BALANCE || type==OP_CREDIT)         initial_deposit-=OrderProfit();     }//----   return(initial_deposit);  }
在MetaTrader 4 客户端内测试报告会以这种形式生成。




可以比较使用于独立程序的计算数据。

Initial deposit             10000Total net profit            -13.16Gross profit                20363.32Gross loss                  20376.48Profit factor               0.99935416Expected payoff             -0.01602923Absolute drawdown           404.28Maximal drawdown            1306.36 (11.5677%)Relative drawdown           11.5966%    (1289.78)Trades total                    821Short positions(won %)      419 (24.821%)Long positions(won %)       402 (31.592%)Profit trades (% of total)  231 (28.1364%)Loss trades (% of total)    590 (71.8636%)Largest profit trade        678.08Largest loss trade          -250Average profit trade        88.15290043Average loss trade          -34.53640678Average consecutive wins    1Average consecutive losses  4Maximum consecutive wins (profit in money)  4   (355.58)Maximum consecutive losses (loss in money)  15  (-314.74)Maximal consecutive profit (count of wins)  679.4   (2)Maximal consecutive loss (count of losses)  -617.16 (8)
该文章的附加文件SummaryReport.mq4 建议保存在目录experts\include 中并且使用 #include 开启。

#include <SummaryReport.mq4> double ExtInitialDeposit;
转自俄罗斯MetaQuotes Software Corp.
原文: http://articles.mql4.com/ru/125



附件:
SummaryReport.mq4 (12.0 Kb)
创建: 2008.03.24  创建人: Slawa Starikoff
金币:
奖励:
热心:
注册时间:
2006-7-3

回复 使用道具 举报

 楼主| 发表于 2008-5-25 07:06 | 显示全部楼层
一分钟数据模式质量等级 [ en | ru ]

在文章 智能测试报告中数字的意义中给出了计算模式质量的公式:
ModellingQuality = ((0.25*(StartGen-StartBar) +                      0.5 *(StartGenM1-StartGen) +                      0.9 *(HistoryTotal-StartGenM1)) / (HistoryTotal-StartBar))*100%;位置:
  • HistoryTotal - 在历史中的总数额;
  • StartBar - 开始测试柱的数字。模型开始于最小的第101个柱或者测试水平初始日期相关的柱;
  • StartGen - 在最近的时间范围内开始测试柱的数字;
  • StartGenM1 - 在原有分钟内开始测试柱的数字;
另外:
  • 对于最近时间范围数据库模型的开始和最近时间范围数据模型的开始存在重量系数0. 25的区别;
  • 对于最近时间范围数据库模型的开始和最近时间范围数据模型的开始在原有分钟内存在重量系数0. 5的区别;
  • 在原有时间上模型的开始和历史数据的末尾之间重量系数0.9的区别。

在一分钟时间周期内数据模式的等级是非常高的: 质量90%。

从相同的公式推理得出,一分钟数据模式的质量不会超过 25% 。因为对于这些数据的模式不使用较小周期的数据。对于客户终端,较小周期的数据只是不存在,但是存在替克数据。虽然,替克数据是以标准方式在客户端内存储的。

一分钟数据本身对于价格的变动有很多的详细数据。并且在较大周期图表得内部柱中,它可以帮助价格变动的模式化。另外, 在真实价格变动和模式替克之间的差异将会小于一分钟图表呈现的点数:开盘价,最高,最低,收盘价。这些参考点数可以模式化第一个价格变动的最近函数(第一个最靠近的定单)。时间周期模式值越高,这些参考点数就越多并且模式就越准确。相反地,时间周期模式值越低,模式的质量就越低。例如,一分钟参考点使用到模式一小时柱为 240。当模式化一个5分钟柱时,参考点数的总数下滑至20.

正如我们所讲的,对于一分钟柱的模式值存在4个参考点数!这就是为什么对于一分钟柱的质量等级不可能超过 25%的原因。然而,在一分钟时间周期测试时,如果使用从较大时间周期数据中得到的信号 ,数据会模式化。 这样得到的等级要高得多。因为在时间周期的柱大于分钟柱内价格变动被考虑。

注解: 严格地讲,以一分钟数据模式化为基础计算5分钟质量和相关的等级为 0.5,而不是 0.9。这种计算是在“最近时间周期的历史数据的基础上模式化”的限定内。不过,我们决定不再引入附加的公式和复杂的模式计算方法。
创建: 2008.03.12  创建人: MetaQuotes Software
金币:
奖励:
热心:
注册时间:
2006-7-3

回复 使用道具 举报

 楼主| 发表于 2008-5-25 07:07 | 显示全部楼层
MetaTrader 4中的测试特性和限定 [ en | ru ]
介绍 文章介绍在 MetaTrader 4中更多策略测试的特性和限定。
历史数据上的策略测试的特殊特性
  • 在没有输出信息情况下,一些函数处理/通过
    它们是 Sleep(), Alert(), SendMail(), PlaySound(), MessageBox(), WindowFind(), WindowHandle(), WindowIsVisible()
  • 在测试情况下对于货币对允许交易,不是测试文件夹
    尝试使用其他货币对交易将返回错误
  • 标准手数大小包含初始大小和增加份额,佣金和掉期可以从激活的账户中设置
    在测试之前,需要确认在终端“导航”窗口列表中存在至少一个己激活账户。
  • 全部掉期,需求保证金,期限, GTC-定单被模式化
    执行测试最大限度地接近交易服务器状态。但是由于每个时刻价格转换信息短缺,可能出现一些不可估测的需求保证金要求。
  • 在测试被模式化的情况下相同货币对的其他时间周期的零柱
    Open =正确开仓, Close =正确平仓, Low = 最低 (Open,Close), High = 最高(Open,Close), Volume = 最终成交量 (false)
  • 在交易中使用即时交易模式,拒绝延期处理
  • 定单处理, 不延期Open/Close
  • 在 StopOut之后,测试停止
  • 每星期,每月和不标准时间周期不能测试
  • 货币存款额可以改变,但是要设置价格转换并且使用当前的一个变量
  • 不允许拖延交易业务的执行
    计划设置延误是为了里了解交易的处理
  • 账户历史为完整变量,不取决于设置
  • 如果其他货币对和时间周期被激活使用, 会尽可能下载这些货币对和时间周期
  • 在独立测试情况下,对于货币对每个替可和测试的模式化需要全部的时间周期
  • 使用MarketInfo函数产生错误 ERR_FUNCTION_NOT_ALLOWED_IN_TESTING_MODE(4059),虽然显示正确的货币对当前价格,止损水平范围,大小点数和在报价窗口提供的货币对价差大小信息。
优化处理的特殊特性
  • 在日志内没有任何输出信息 (还有 Print()函数)
    这样做可以加快测试速度并减少占据硬盘空间。如果日志文件完全输出信息将需要上百 MB。
  • 画出物件没有真实设定
    在加快测试速度的指令下禁止物件。
  • 使用"Skip useless results"功能
    为了不混淆表格和图表的测试结果,尽量使用该功能。 此函数在 "优化结果"的菜单中 -> &quotSkip useless results"栏 tab.


创建: 2008.03.10  创建人: MetaQuotes Software Corp.
金币:
奖励:
热心:
注册时间:
2006-7-3

回复 使用道具 举报

 楼主| 发表于 2008-5-25 07:08 | 显示全部楼层
Strategy Tester:交易策略测试中模式化的方式 [ en | ru ]
介绍 技术分析的很多程序允许在历史数据上测试交易策略。在大多数情况下, 测试被连接到已经完成的数据上,在价格柱内这些数据不带有任何试图模式化的趋势。测试会快速进行,但是不是十分精确。
要得到高质量的交易策略测试,重要的是选择正确模式化价格柱的方法。最理想的状态是拥有一个完整的替克历史记录,但这种状况在现实中基本不存在。通常,一个交易者很难找到几年以内完整的替克历史记录,用来做分析。
解决这个问题,我们可以使用精确周期的数据作为模式价格变化的模式价格变化的参考点。

价格柱模式化的方法 在 MetaTrader 4 客户端内存在三种模式化的方法:



  • 每个替克 (以全部可用时间周期为基础的最精确方法)
  • 控制点 (以最近较小的时间周期为基础的一个自然方法)
  • 开盘价(在完整柱上快速的方法,只适用于明确检测柱打开的智能交易)
在测试开始之前会生成中级的价格柱, 结果被保存在文件中 (例如: /tester/history/eurusd_1440_1.fxt)。每一次电击开始按钮,测试将会生成包含测试替克顺序的新文件。在终端内Fxt文件可以作为离线图表通过 文件 ->离线打开轻松地打开 。


模式化范例 现在让我们以一小时图表为基础做最简单的模式化。我们来研究一小时图表中红色圈出的柱 (九月, 5 2007, 10:00) :



开盘价 一些交易者不希望依赖内部柱模式化的特殊性,所以他们创建智能交易在已经完整的柱上进行交易。事实上当前价格柱已经非常完整,可以通过下一个柱的显现看出。对于这些智能交易的模式化方法使用“开盘价"。



在这种方法中,首先需要打开柱(Open = High = Low = Close, Volume=1),并且允许智能交易准确地识别出先前价格柱结束。在这个刚刚形成的柱中开始智能交易的测试。下一步,模式化当前柱,但是不允许在这个柱上执行测试!
控制点 (最近小时间周期) 控制点模式化方法适用于智能交易内部柱的自然评估。使用这个方法,最近小时间周期的历史数据必须具备可用性。一些情况中,可用数据来自较小的时间周期不能够完全覆盖测试时间周期的时间距离。如果较小时间周期没有数据, 演化的柱会以预定义模式生成。与先前MetaTrader 3客户端的第三版本相似。

加入这些数据,小时间周期的历史数据会很快显现。小时间周期显现已存在的 OHLC 价格作为控制点。大多数情况下,由控制点测试的智能交易测试结果只作为估测结果 ,而不是最后结果。这些结果具有中间价格的特点。 以下图表展示如何以控制点的方法创建一小时柱 2007.09.05 10:00 。



每个替克 (全部可用时间周期) 这种方法能够更加精确地模式化变动的价格。与"控制点"不同,每个替克的模式化方法不仅使用最近小时间周期的数据,同样需要全部可用的较小时间周期。另外,如果在一段时间里同时存在数据超过一个时间周期,生成则使用较小时间周期的数据。与先前方法相同,这种方法生成检测点是以可用的较小时间周期OHLC 数据为基础的 。在控制点之间生成变动价格,同样使用以预定义模板为基础的插入法。这样,一分钟的可用数据覆盖测试的时间距离。 可能会发生相同替克一个接一个地生成。这种情况下,滤除重复报价并且固定最后三个连续报价。




必须考虑较大替克数量的生成。它会影响系统业务的消耗和测试速度。
注意:如果没有较小时间周期覆盖测试时间距离,无需开启每个替克测试。这种模式化只适用于以较小时间周期为基础的测试!


对于模式化使用的日期范围 日期的范围使用不仅限于智能交易的测试,同样限于测试柱顺序的生成。我们无需生成完整地历史数据,特别是对于每个替克模式化,不会用到大量的数据。所以,如果初期测试顺序生成,可能使用日期范围。随后,超过给出范围的柱不再生成,但是只是输入数据覆盖到输出的顺序。 这析数据不会从定单的顺序中排出,可能计算指标获取完整历史的正确性。必须要注意的是第一个 100个柱不会在生成,这个限定不取决于日期范围的设置限定。
参考 M1 时间周期 检测内部柱模式化的准确性,我们使用2007年9月 5日的一分钟图表。在10:00和 11:00 p.m. 之间作比较。

1


在每个替克的模式中,生成以下顺序:




因为每个柱的替克成交量不允许超过 5, 顺序生成插入最小使用。 基本上所有的都存在 OHLC 价格。


即时没有标准,只是简单地叠加一分钟图表到一小时图表 (在一小时图表中收盘价作为绿色线显示),它们几乎相同:



结论 如果存在可用的辅助的较小时间周期能够百分百覆盖时间周期的距离,那么就能够执行最为精确的测试并得到值得信赖的准确结果。就是说,每个替克高质量的测试需要在历史数据的细节中找寻...


创建: 2008.04.03  创建人: MetaQuotes Software Corp
金币:
奖励:
热心:
注册时间:
2006-7-3

回复 使用道具 举报

 楼主| 发表于 2008-5-25 07:08 | 显示全部楼层
智能测试报告中数字的意义 [ en | ru ]
介绍 任何交易可以在历史数据上测试。在测试完成之后,总结性的结果和一些特性会在“报告”标签显示。报告允许对不同智能交易进行对比,对于相同而不同输入数据的智能交易进行对比。本文将会详细解析测试报告中的数字意义。
测试结果报告范例以下方测试报告结果为范例进行解析:


  • 'Bars in test' 以模型为基础,显示历史的深度。
  • 'Ticks modelled'显示模型次序的大小。 每一个记录的次序代表柱的当前或另一时刻状态 (OHLCV)。 不同柱的状态取决于时间范围,模型方法,和从较小时间段内的柱的历史数据。
  • 'Modelling quality' 按照以下的公式进行计算:
    ModellingQuality = ((0.25*(StartGen-StartBar) +
                         0.5 *(StartGenM1-StartGen) +
                         0.9 *(HistoryTotal-StartGenM1)) / (HistoryTotal-StartBar))*100%;位置:
    • HistoryTotal - 在历史中的总数额;
    • StartBar - 开始测试柱的数字。模型开始于最小的第101个柱或者测试水平初始日期相关的柱;
    • StartGen - 在最近的时间范围内开始测试柱的数字;
    • StartGenM1 - 在原有分钟内开始测试柱的数字;
    另外:
    • 对于最近时间范围数据库模型的开始和最近时间范围数据模型的开始存在重量系数0. 25的区别;
    • 对于最近时间范围数据库模型的开始和最近时间范围数据模型的开始在原有分钟内存在重量系数0. 5的区别;
    • 在原有时间上模型的开始和历史数据的末尾之间重量系数0.9的区别。
  • Gross profit, 所有赢利交易总数的净赢利值;
  • Gross loss, 所有亏损交易总数的净亏损值;
  • Total net profit, 净赢利值和净亏损值之间的差别:
    TotalNetProfit = GrossProfit - GrossLoss
  • Profit factor, 赢利原因显示在多少时间内净赢利值超过净亏损值:
    ProfitFactor = GrossProfit / GrossLoss
  • Expected payoff,预期值可以使用以下公式进行计算:
    Expected Payoff = (ProfitTrades / TotalTrades) * (GrossProfit / ProfitTrades) -
                      (LossTrades / TotalTrades) * (GrossLoss / LossTrades)位置:
    • TotalTrades - 交易总数;
    • ProfitTrades - 赢利交易总数;
    • LossTrades - 亏损交易总数;
    • GrossProfit - 净赢利交易总数;
    • GrossLoss - 净亏损交易总数.
  • 在一定程度上从最初的平衡显示减少原始的价值: AbsoluteDrawDown = InitialDeposit - MinimalBalance
  • 最大借款值和当前最小借款值的最大差距:
    MaximalDrawDown = Max of (Maximal Peak - next Minimal Peak)在图表的下方会给出测试的最大借款价值的基本状态。总的最大借款价值会以粗箭头标出。



    最大借款百分比的比率等于最大借款和它的各自价值的商:
    MaxDrawDown % = MaxDrawDown / its MaxPeak * 100%
在报告中显示的其他结果可以应用简单的数学方法计算。
  • Total trades - 在测试里的交易总数;
  • Short positions (won %) - 卖空仓位总数额和其中赢利百分比(卖空仓位/卖空仓位总数*100%);
  • Long positions (won %) - 看涨仓位总数额和其中赢利百分比(看涨仓位/看涨仓位总数*100%);
  • Profit trades (% of total) - 赢利交易总数和交易总数的百分比(赢利交易/交易总数*100%);
  • Loss trades (% of total) - 亏损交易总数和交易总数的百分比(亏损交易/交易总数*100%);
  • Largest profit trade - 赢利交易中获得的最大赢利;
  • Largest loss trade - 亏损交易中获得的最大赢利;
  • Average profit trade - 赢利交易中赢利的平均数 (净赢利值 / 赢利交易);
  • Average loss trade - 亏损交易中亏损的平均数(净亏损值 / 亏损交易);
  • Maximum consecutive wins (profit in money) - 在这一系列赢利总数和交易的赢利系列中最大连续盈利;
  • Maximum consecutive losses (loss in money) - 在这一系列亏损总数和交易的亏损系列中最大连续损失;
  • Maximal consecutive profit (count of wins) - 在交易总数中最大连续交易的赢利;
  • Maximal consecutive loss (count of losses) - 在交易总数中最大连续交易的赢利;
  • Average consecutive wins - 赢利系列中连续盈利的平均数;
  • Average consecutive losses - 亏损系列中连续损失的平均数.
模型示意图中的色彩应用以下色彩应用于以下示意图:
  • 亮绿色- 分钟内的模型,图中标注为7。
  • 略深绿色 – 显示模型大的时间范围,从M5至 H4。
  • 粉色- 完全的不规则碎片模型。图中标注为2 。
  • 灰色- 原有的模型,图中标注为1 。


上方的色彩示意图是按照最初模型数据计算的:
  • Bars in test = 4190;
  • StartBar = 2371;
  • StartGen (H4) = 3042 (图中标注为3 );
  • Start H1 = 3355 (图中标注为4);
  • Start M30 = 3841 (图中标注为5);
  • Start M15 = 3891 (图中标注为6);
  • Start M5 = 0 (图中没有标注);
  • Start M1 = 3917.
由以上这些价值和模型的公式获得以下结果:
((0.25*(3042-2371) + 0.5*(3917-3042) + 0.9*(4190-3917)) / (4190-2371))*100% =
((0.25*671 + 0.5*875 + 0.9*273) / 1819)*100%                                = 46.78%


创建: 2007.07.03  创建人: MetaQuotes Software Corp.
金币:
奖励:
热心:
注册时间:
2006-7-3

回复 使用道具 举报

 楼主| 发表于 2008-5-25 07:10 | 显示全部楼层
使用 MetaTrader 4客户端初学者的常见错误 [ en | ru ]

  • 我的终端显示的时间有误。如何设置时间能够使终端时间与我的电脑时间相同?
    显示在终端上的时间是最后报价进入客户端的交易服务器时制定的。在客户端内同样是最后可用的服务器时间。在MQL4 程序中,时间可以通过使用TimeCurrent()函数获取。在客户端上的服务器时间不会改变。服务器上的时间只能通过经纪公司进行修改。
  • 当我在不同电脑上测试相同智能交易时,得到了不同的结果。这是为什么?
    测试结果取决于智能交易交易策略的算法(你是使用当前柱的High, Low 或 Close prices 吗?每个替克的价格都在变化吗?),取决于历史数据 (历史数据的获取和质量),取决于测试模式。检测在不同电脑上你安装的客户终端货币对名称和时间周期历史是否一样。
  • Print() 函数在日志中不显示全部信息。这是为什么?

    Print()函数在智能交易日志中打印信息,函数的全部信息被放置在日志内。在‘终端’窗口的‘智能交易’栏内放置了同样的信息。 当信息过量时,终端在‘智能交易’栏就不能够显示全部信息,它会按照命令保存信息和空间。如果需要可以使用 Print()函数登陆客户终端的 the '\MetaTrader 4\experts\logs\' 文件,进行浏览。
  • 在进行刷新 (重新开始) 客户终端之后,一些货币对名称仍然显示在‘市场观察’窗口。这是出现了什么问题?

    您应该在‘市场观察’窗口的菜单中选择'显示全部货币对名称'命令。
  • 我不能从‘市场观察’窗口删除货币对。这是为什么?

    货币对不能从‘市场观察’窗口删除可能有以下几个原因:
    • 此货币对的图表处于打开状态;
    • 在货币对图表关闭之后终端没有刷新;
    • 此货币对存在开仓。
  • 当在预设的时间周期上测试交易策略时,测试通知在图表内没有数据通过柱。应该怎样解决这个问题?

    尝试加载更多的历史数据。如果您使用测试日期 (开始时间-日期 1,截止时间 - 日期 2),在给出的时间周期内您需要加载约100 个柱。
  • 当我尝试输入历史数据时,没有任何反应。这是为什么?
    历史数据必须是以下的格式:

    YYYY.MM.DD HH:MM O H L C V
    YYYY-MM-DD HH:MM O H L C V
    YYYY/MM/DD HH:MM O H L C V
    DD.MM.YYYY HH:MM O H L C V
    DD-MM-YYYY HH:MM O H L C V
    DD/MM/YYYY HH:MM O H L C V
    YYYY.MM.DD,HH:MM O H L C V
    YYYY-MM-DD,HH:MM O H L C V
    YYYY/MM/DD,HH:MM O H L C V
    DD.MM.YYYY,HH:MM O H L C V
    DD-MM-YYYY,HH:MM O H L C V
    DD/MM/YYYY,HH:MM O H L C V
  • 一些经纪公司允许 1:100比率。但是在尝试开设新帐户时客户终端是不允许的。
    您应该从制造客户端的经纪公司下载客户终端,然后开设账户。
  • 在我的客户端内,基本货币对的4小时图表进入的交易在10分钟内得到 600 KB!这是错误的还是正常现象?
    这是历史的初始滚动。 问题在于每个柱的滚动是数以千计的。 将来在运行时,对于在相同服务器上的相同账户,交易将会很少的历史的滚动。
  • 对于长时间的隐藏需要用鼠标光标移动柱或定单编号。
    当光标接近收盘价时,该窗口弹出。可以在‘数据窗口’浏览需要数据。
  • 斐波纳契弧线显示为直线。应该怎样做?

    比率可以根据价格作调整。默认值设定为 1点,但是这对于时间周期为天和月的图表是不够的。所以你需要改变比例。
  • 我最近开设了一个模拟账户。今天,程序通知为‘无效账户’。这是为什么?
    模拟账户在未激活的中心周期内过期。这种情况下,你可以开设一个新的模拟账户。
  • 当打开新闻时,没有任何新闻内容文本。这是为什么?
    只有新闻的主题可以转换到模拟账户。
  • 在真实交易中,我尝试开新定单。程序通知‘价格改变’。这意味着什么?

    问题在于真是账户,确认交易您仅有7秒钟的时间(包括获得回复和得到报价)。如果您的连接状态不好,就会可能出现超时。这样您需要联系您所开设账户的公司技术支撑部门,指定您的账号并请求他们检测您的交易:有没有超时?如果价格改变并且您的经纪拒绝价格,您同样会得到‘价格改变’的信息。
  • 当我尝试开仓时,出现‘资金不足’。这是为什么?
    重新检查自由保证金和设置的交易成交量。
  • 为什么'新定单 — 请求' 返回到 '市场关闭'?
    最有可能的是你尝试开仓的时间是休息日 — 休息日交易不开放。



转自俄罗斯 MetaQuotes Software Corp公司.
  原文: http://articles.mql4.com/ru/278

创建: 2008.02.08  创建人: MetaQuotes Software Corp.
金币:
奖励:
热心:
注册时间:
2006-7-3

回复 使用道具 举报

 楼主| 发表于 2008-5-25 07:11 | 显示全部楼层
MetaTrader 4 客户端的秘密:指标 [ en | ru ]

在现在的经济市场中没有技术指标是很难分析估测市场状态的。您可以创建你自己的指标或使用插入指标。插入的指标比客户本身指标相对较快,但是一些工具特性在客户指标内不能满足。比如,附加到图表指标可以在主窗口和子窗口都有显示。另外,指标的计算不会是价格/成交量,而是其他指标上的值。
聪明地应用插图指标将有助于自己编写的程序。
在 MetaTrader 4 客户端内插入三十个指标。按照条件分为以下四组:
  • 震荡指标;
  • 趋势指标;
  • Bill Williams指标;
  • 成交量.

趋势指标能够帮助在一个方向内探测价格浮动。震荡指标允许探测一些同时回转和前进。Bill Williams指标具有震荡指标和趋势指标的双重特性。成交量分析不是价格变动,而是进入柱的替克总数。


分组总结指标特点简表
使用图表中的连接,您可以查看相应插入指标的源代码。

指标
简称
类型Separate/
Main
结合
s / m
添加线周期/
平移
应用
MA 方法水平
Acceleration/Deceleration OscillatorACbs+/---/---+
Accumulation/DistributionA/Dvs+/---/---+
AlligatorAlligatorbm-/+-+/+++-
Average Directional Movement IndexADXts+/--+/-+-+
Average True RangeATRos+/--+/---+
Awesome OscillatorAObs+/---/---+
Bears PowerBearsos+/--+/-+-+
Bollinger BandsBBtm+/+++/++-+
Bulls PowerBullsos+/--+/-+-+
Commodity Channel IndexCCIts+/+++/-+-+
DeMarkerDeMos+/--+/---+
EnvelopesEnvom+/+++/++++
Force IndexFRCos+/--+/-+++
FractalsFractalsbm-/+--/----
Gator OscillatorGatorbs+/--+/++++
Ichimoku Kinko HyoIshimokuom-/+-+/----
Market Facilitation IndexBW MFIbs+/---/---+
MomentumMomentumos+/+++/-+-+
Money Flow IndexMFIvs+/--+/---+
Moving AverageMAtm+/+++/++++
Moving Average Convergence/DivergenceMACDos+/--+/-+-+
Moving Average of OscillatorOsMAos+/--+/-+-+
On Balance VolumeOBVvs+/---/-+-+
Parabolic SARParabolictm-/+-+/----
Relative Strength IndexRSIos+/+++/-+-+
Relative Vigor IndexRVIos+/--+/---+
Standard DeviationStdDevts+/+++/++++
Stochastic OscillatorStochasticos+/--+/++++
VolumesVolumesvs+/---/---+
Williams’ Percent Range%Ros+/--+/---+

表格解析描述
类型
  • o – 震荡指标;
  • t – 趋势指标;
  • b – Bill Williams指标;
  • v – 成交量.
Separate/main
  • s – 按照默认值附加到子窗口;
  • m –按照默认值附加到主窗口.
结合 s/m: 能否在子窗口(s)或主窗口(m)添加结合指标。
添加线: 添加线,先前指标数据和第一指标数据当被拖拉时,在 “应用”窗口将会显示。



先前指标数据 - 最后添加到主窗口或子窗口的数据。如果没有添加数据,先前指标数据成为图表数据.并且被添加的指标将以图表的平仓价位基础建造。
第一指标数据 - 作为第一次添加到主窗口或子窗口的数据。如果没有添加数据,第一指标数据成为图表数据。 并且被添加的指标将以图表的平仓价位基础建造。

周期/平移:在指标属性窗口的“参数”栏内在相应名称的部分可以随意改动。



应用:在指标属性窗口的“参数”栏中可以选择“应用”范围。



МА 方法: 在“参数”栏选择。 (移动平均数创建方法选择)。
水平: “水平”栏选择。


如何添加指标到图表
添加一个指标到图表可以有六种方法:
  • 使用主菜单命令:

  • 使用

  • 在“导航”窗口双击指标名称;
  • 选择“导航”窗口的菜单命令:

  • 使用设置热键;
  • 用鼠标拖拉指标到主窗口或其他指标子窗口(drag-and-drop)。


前五种方法基本上类似。我们可以把些指标添加设为默认形式。此外,指标将会按照默认在图表或子窗口中画出。第六中方法拖拉显然有趣些。当拖拉到图表中后,一些指标可以计算从其他指标值到添加图表。这些“特殊”指标分别为:
  • 保加力通道指标;
  • 商品通道指数指标;
  • 包络线指标;
  • 动量指标;
  • 移动平均线;
  • 相对强弱指数指标;
  • 标准离差。
插入的指标能够与其他指标或其他指标计算的值结合。 结合起来,指标的添加和放置会显示出来,但是它本身具有边界。这种情况下,指标的值将附加到图表值。
一个插入的指标会以默认形式显示到子窗口,并且能够在子窗口内与已存在的指标结合。.一个插入的指标会以默认形式显示到主窗口,并且能够在主窗口内与已存在的指标结合。
大多数指标只能以默认形式添加到图表。只有上边的七个“特殊”指标可以同时添加到主窗口和子窗口。


如何将添加到主窗口的指标以默认形式在子窗口中打开
以下指标可以在子窗口中默认打开:
  • 商品通道指数指标
  • 动量指标
  • 相对强弱指数指标
  • 标准离差
现在我们以商品通道指数指标为例学习这些指标的属性。
如上面所说的这个指标可以以默认形式在子窗口中打开:




添加CCI到主窗口,需要拖拉至图表。指标的属性将会给出:




实际上,图表和指标是同时的。所以,如果没有其他指标,第一指标数据和先前指标数据成为图表本身的数据,并且在画线方法上先前指标值与第一指标值没有差别。
这样,添加指标到图表窗口,需要拖拉指标到图表并且选择第一指标数据或先前指标数据。
得到的结果:



动量指标,相对强弱指数指标和标准离差添加到图表窗口的方式同上。


如何将添加到子窗口的指标以默认形式在主窗口中打开
这组的指标列表如下:
  • 保加力通道指标;
  • 包络线指标 ;
  • 移动平均线
让我们以移动平均线为例。这个指标默认形式如下:



MA 添加到一个独立的子窗口,需要比前面多一些动作。
首先,一个独立的子窗口必须“创建”。这样,我们就可以在子窗口中添加任何指标到图表。例如, MACD。



现在,我们可以拖拉移动平均线到MACD 窗口内并且在属性窗口选择先前指标数据或第一指标数据(在子窗口内仅有一个指标, the MACD,它将是第一个也是最后一个)。
当一定数量的指标添加到子窗口后,它总会探测其中的哪一个更合适。选择先前指标数据作为显示s "->", 还是第一指标数据 "=>"。



使价格数据能够在图表中显现需要选定。







我们在获得 MACD 和移动平均线的折叠。我们可以停止,但是仍然需要将移动平均线保留在窗口中。这样做,需要移除 MACD。但是,如果我们这样移除,在 MACD 的值也将被删除。所以,首先需要将移动平均线从MACD上脱离。例如,关闭值。



现在, MACD可以移除,移动平均线将保留在独立窗口中。



因此,不同指标的属性结合可以建立一个相当复杂的系统。


一些添加指标的常规属性
  • 如果添加指标可以获取几个线上的指标值 (多于一个),它将会在零线上或主线上计算。在代码中,这条线被用到探测 SetIndexStyle 函数的第一参数值。例如,如果添加上的指标在 MACD上计算,计算值将带着柱状图值进入 MACD 代码: SetIndexStyle(0, DRAW_HISTOGRAM)。
  • 许多指标对于最大和最小限量存在默认值,例如, RSI。在这种情况下,在将它添加到另一个指标之后,例如, MACD, 它们的边界不能重合等等。RSI 将不会关注MACD 窗口。



    纠正这一点,需要改变最大和最小,让指标独立存在。


  • 当一定数量的指标添加到一个子窗口时,总是会尽可能地探测哪一个更合适。选择先前指标数据显示 "->",第一指标数据作为显示 "=>"。



    通过上面的例子,指标的构建可以分为以下:
    • 添加MACD;
    • 在第一指标数据上计算 MA,获取MACD值;
    • 在第一指标数据上计算 RSI,再次获取MACD值;
    • 使CCI和 MACD结合;
    • 在先前指标数据计算动量指标,获取 CCI值。
  • 插入的指标不仅可以和插入的指标结合,同样可以和客户指标结合。添加的原理相同。例如:



怎样创建水平
一些指标允许创建水平。对于 MA,可以创建一个应用水平通道。这样需要进入到“水平”栏并使用“添加”键设定值。





现在,如果我们使 MA的颜色与背景颜色相同,我们将在移动平均线获取创建通道。





"Visualization" 栏

最后,让我们来总结一下在 MetaTrader 4 客户端中的指标属性。所有的指标,无论是插入指标还是客户指标都存在这种属性。它们可以接受商品,图表和技术分析工具。
对于不同时间段的同样商品数据分析结果是不同的,这已经不是秘密。可以使用不同的技术工具,包括不同设定的不同指标。当改变时间周期时,为了不用一而再再而三的调动指标:在指标属性窗口的时间周期内可以进行改变。



在未来,当相互转换不同时间周期时,将会看到不同的指标。对于其他商品会保留使用模板。
例如:在时间周期H1 和 M15,相同的指标, MACD 和MA被添加,但是不同的时间周期。
  • 时间周期为 H1; MACD值为12, 26, 9;在 MACD周期上计算MA 的7个周期; MA(7)上计算MA 的5个周期。
  • 时间周期为 M15: MACD 值为 24, 52, 18;在 MACD周期上计算MA 的28 个周期; MA(28)上计算MA 的20个周期。







Translated from Russian by MetaQuotes Software Corp.
Original article: http://articles.mql4.com/ru/180

创建: 2008.02.12  创建人: MetaQuotes Software Corp
金币:
奖励:
热心:
注册时间:
2006-7-3

回复 使用道具 举报

 楼主| 发表于 2008-5-25 07:12 | 显示全部楼层
MetaTrader 4 客户端的秘密: MetaEditor 里的文件库 [ en | ru ]


Files
所有的 MQL4 程序都可以通过菜单 "File -> Open" 或工具栏打开并使用。当然还有更便捷的方法,就是使用面板组里的文件面板。
在文件面板里,所有的 MQL4 程序都被列出,它们储存在文件夹 "\MetaTrader 4\experts\" 或下属子文件夹里。
在文件面板中的右键菜单提供以下功能:

  • New File... — 新建一个空白的 MQ4 文件,这个文件将会在新建在你所选取的文件夹下。如果要在文件夹 "\MetaTrader 4\experts\" 下新建文件,请在根目录下点击右键。
  • New Folder... — 新建一个子文件夹在任一选取的文件夹下。如果要在文件夹 "\MetaTrader 4\experts\" 下新建子文件夹,请在根目录下点击右键。
  • Open — 在 MetaEditor 编辑窗口中打开程序代码。
  • Delete — 删除选中的文件或文件夹。
  • Refresh — 刷新程序列表,和文件夹 "\MetaTrader 4\experts\" 同步。
  • Show All — 显示/隐藏所有的文件类型。默认情况下,只显示后缀名为 MQ4、MQH、MQT 的文件。


Library
如果在文件面板中找不到你要的程序,你可以上我们的网站下载。不过你不用打开浏览器搜索并下载,使用 MetaEditor,打开 "Toolbox" 窗口的 "Online Library",便能快速地找到你需要的程序。



选取相应的页 - "Experts | Indicators | Scripts | Libraries | articles" - ,来自 MQL4.com 网站的不同的文件或文章会自动显示。显示的语言将根据当前设定的语言而定,英语或是俄语。这点是非常重要的,因为不同的语言使用的是不同的数据库。也就是说你在俄语版里找到的文件,在英语版里不一定有,反之亦然。
每一页都能根据列来排序。还有一个搜索引擎可以帮你快速地找到你需要的程序,它能同时搜索所有的页面。这个搜索引擎是大小写敏感的,也就是说在搜索时 "MACD" 和 "macd" 是不同的。



选取需要的程序,你可以打开网页查看该程序的详情并下载代码。使用右键菜单中的 "Open" 查看程序详情,它会在 "Toolbox" 窗口的 "Help" 面板中打开。双击作者的名字,可以查看作者的个人信息。



如果要在客户端读取一个 "Indicator" 代码,必须先下载它。你可以使用 "Download" 按钮或者右键菜单中的相应命令,MQ4 文件就会自动保存到客户端的文件夹中 ("\MetaTrader 4\experts\" 或其子文件夹),下载的代码则会在 MetaEditor 的编辑窗口打开。


Setup

"Toolbox" and "Navigator" 窗口可以按你的意愿随意排列。当你将鼠标移到窗口上方的蓝色条,点击并拖曳窗口时,MetaEditor 的主窗口和其他窗口都会随之移动,当你在同时使用其它软件时,这是非常有用的。


MetaQuotes Software Corp. 翻译自俄语
原文: http://articles.mql4.com/ru/211



创建: 2006.12.06  创建人: Tatyana Vorontsova
金币:
奖励:
热心:
注册时间:
2006-7-3

回复 使用道具 举报

 楼主| 发表于 2008-5-25 07:13 | 显示全部楼层
MetaTrader 4客户段的秘密:警报系统 [ en | ru ]

系统事件
在菜单中打开 "工具 -> 选项"并选择"事件"栏。警报文件的事件默认为 WAV文件.



这些文件可以在客户端的 \MetaTrader 4\sounds\ directory中找到.警报可以作为选项修改.警报的设定可以选项栏列表中活动上双击鼠标左键.



警报可以是一个 WAV文件和执行文件("EXE", "VBS", "BAT").



如果选择另一个警报文件类型,所选择的文件类型将被开启。在选择之后,按 Enter键确认选择。事件警报可以通过在“事件”栏双击鼠标左键 禁止。


用户-指定事件
客户事件可以分为以下两个类型:
  • 价格达到货币对预定值;
  • 达到预定超时。


设置警报,需要在“终端”窗口进入“警报”栏并且按插入键。



警报会在所处的空间内开启/禁止,修改按 Enter。

警报可以分为三种方式: 声音警报,执行文件,邮件信息。对于所有的警报方式,需要指定"货币对" 和状态 ( "状态" 和 "值"),在遇到时警报将会开启。 同时需要在 "超时"和 "最大重复"中设定警报次数。


声音警报


文件存储在客户端 \MetaTrader 4\sounds\ directory 中,可以使用以下声音模式作为警报: "WAV", "MP3", "WMI"。如果选择"MP3"或 "WMI"模式,所选的文件模式将会在警报启动时开启。




执行文件


执行文件可以分为 "EXE", "VBS", "BAT"模式。如果文件的类型选定后,遇到相应的文件类型警报将会开启。




邮件信息



经过邮件获取警报信息,需要在菜单的"工具 -> 选项" 中"的Email"预先设定。 点击 "开启" 并且填写你邮件服务器的相关设定信息。在每个相应的栏中,你可以看到相应的红色提示。

SMTP 服务器 – 你的邮件服务器地址经由 SMTP。不要忘记用冒号隔开端口数字。通常使用端口 25. 举例: smtp.mail.ru:25 SMTP 登陆 – 你的邮箱地址。 SMTP 密码 – 进入邮箱的密码。

来自: –需要在相同服务器上输入登陆 ("名称")和你的邮箱地址,你应用的SMTP。如同规则,邮箱地址恰好是登陆的第一部分,但是可以跳过

发送到: – 您将发送警报的地址。 "名称"地址部分可以跳过。通常来讲,"发送到:"需要填写真是的邮箱地址







点击 "测试"按钮,检查信息是否已经发送到你指定的邮件地址“发送到”。如果所有设定已经被正确填写,信息: "邮件: '测试信息' 已发送"会显示在“日志”中。

对于短信息的发送,你需要在“发送到”栏中指定提供邮箱地址。使用SMTP服务器,你必须核实它或账户部分的设置。另外,需要记住的是并非所有人使用的 SMTP服务器都可以调用POP3服务器。

这样警报被创建。这样做需要在“终端”窗口按插入“警报”。填写所有空格:




创建信息文本,在 上点击最近的 "源代码"。输入信息主题和文本。在主题和信息文本中,你可以使用 "指令"。指令的列表来自随即菜单。




随后,点击“发送”键。

填写完整后,点击"测试"键检测警报是否进入你的邮箱。如果信息成功发送,相应的信息会显现在“日志”栏内:



在 FTP 服务器上公布报告



终端允许在周期预定的基础上公布帐户状态的网上报告。



报告的公布需要设置连接到经过 FTP的网络。打开菜单中的 "工具 -> 选项" ,进入 "公布者"栏。

红色的指定格式用以填充数据。



数据的转换可以通过主动和被动的形式。两者之间的主要差别在于打开连接的方面。主动模式,FTP服务器初始连接,而被动模式,客户自己连接。


周期性将会间隔最短时间被发送的报告。 另外,如果在终端中的交易仓和定单改变,报告将会立即公布。 这种机制提供了数据的准确性 (除当前市场价格和赢利外)。

设置完成后,点击“测试”键。如果报告成功发送,相应的信息会显示在“日志”栏内。






Translated from Russian by MetaQuotes Software Corp.
Original article: http://articles.mql4.com/ru/159
创建: 2008.02.05  创建人: MetaQuotes Software Corp.


[ 本帖最后由 hefeiddd 于 2008-5-25 07:24 编辑 ]
金币:
奖励:
热心:
注册时间:
2006-7-3

回复 使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

本站声明:MACD仅提供交流平台,请交流人员遵守法律法规。
值班电话:18209240771   微信:35550268

举报|意见反馈|手机版|MACD俱乐部

GMT+8, 2025-6-30 20:29 , Processed in 0.056814 second(s), 9 queries , MemCached On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表