我尝试使用CopyRates()到(所有时限搜索几个时限看涨吞没烛台模式(看跌蜡烛,随后一个更大的看涨蜡烛)H2,以M10一个内H4看涨的蜡烛它关闭后)。我阅读了 的定义,CopyRates()但我发现实施起来有点困难。这里的想法来自我想要过滤具有最大看跌与看涨蜡烛对比率的模式的模式。看看我在下面做了什么:
在OnTick():
for (int i=ArraySize(timeframes); i>=1; i--) {
if(CopyRates(Symbol(), timeframes[i - 1], 1, MyPeriod, rates)!=MyPeriod) {
Print("Error CopyRates errcode = ",GetLastError());
return;
}
// Using bullish engulfing pattern:
if ((rates[numCandle].open < rates[numCandle].close) &&
(rates[numCandle + 1].open > rates[numCandle + 1].close) &&
(rates[numCandle + 1].open < rates[numCandle].close) &&
(rates[numCandle + 1].close > rates[numCandle].open)) {
// Not too certain what should be done here
}
}
Run Code Online (Sandbox Code Playgroud)
这是其他相关代码:
input int …Run Code Online (Sandbox Code Playgroud) 我创建了一个类似于以下的套接字文件,并希望MQL5必须读取套接字的输出.请参阅以下python代码;
daemon.py
import socket
#import arcpy
def actual_work():
#val = arcpy.GetCellValue_management("D:\dem-merged\lidar_wsg84", "-95.090174910630012 29.973962146120652", "")
#return str(val)
return 'dummy_reply'
def main():
sock = socket.socket( socket.AF_INET, socket.SOCK_DGRAM )
try:
sock.bind( ('127.0.0.1', 6666) )
while True:
data, addr = sock.recvfrom( 4096 )
reply = actual_work()
sock.sendto(reply, addr)
except KeyboardInterrupt:
pass
finally:
sock.close()
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
client.py
import socket
import sys
def main():
sock = socket.socket( socket.AF_INET, socket.SOCK_DGRAM )
sock.settimeout(1)
try:
sock.sendto('', ('127.0.0.1', 6666))
reply, _ = sock.recvfrom(4096)
print reply
except socket.timeout: …Run Code Online (Sandbox Code Playgroud) 我想开一个订单,没问题,但是如果我想关闭这个订单,我需要票号,票我不能手动写,开单后会给。
从文档中,我得到了这个:

但我不能将 0 以外的任何东西传递给"position": 0(第 20 行),否则它不会打开订单。
同时,如果 position = 0,它将打开一个订单,我将从 中获得一个持仓单result.order,然后我必须手动将其复制并粘贴到position来自关闭订单功能中,就像它将关闭订单一样。
那么,有没有一种方法可以不在每个打开的订单后手动复制票号并将其粘贴到关闭功能中?或者提前为打开和关闭订单写一张独特的票?
先感谢您!
import MetaTrader5 as mt5
if not mt5.initialize():
print("initialize() failed, error code =",mt5.last_error())
quit()
symbol = "EURUSD"
lot = 0.1
point = mt5.symbol_info(symbol).point
price = mt5.symbol_info_tick(symbol).ask
deviation = 20
def buy():
request = {
"action": mt5.TRADE_ACTION_DEAL,
"symbol": symbol,
"volume": lot,
"type": mt5.ORDER_TYPE_BUY,
"price": price,
"position": 0, # can't pass anything else than 0 here, otherwise it will not …Run Code Online (Sandbox Code Playgroud) 我试图搜索找出如何在一定时间范围内搜索模式。显然,该模式可能会根据时间范围出现几次,这就是为什么我对重复的最大次数特别感兴趣。
为了说明我要进一步实现的目标,请说我正在搜索从2小时到15分钟图表的模式,然后在2小时图表中找到它,然后再钻入下一个1小时的时间范围,最后得出在1小时图上的两个模式中,我将继续30分钟(两个1小时模式)和15分钟,直到获得最大的时间。
我认为将需要一种返回下一个较低时间范围的方法。我已经能够写出来,请参见下面的代码。我真的很感谢您的帮助。
ENUM_TIMEFRAMES findLowerTimeframe(ENUM_TIMEFRAMES timePeriod)
{
int timeFrames[5] = {15, 20, 30, 60, 120};
int TFIndex=ArrayBsearch(timeFrames, (int)timePeriod);
return((ENUM_TIMEFRAMES) timeFrames[TFIndex - 1]);
}
Run Code Online (Sandbox Code Playgroud)
编辑
我没有添加特定的烛台图案,因为我认为这不是我的问题中最重要的部分。问题的症结在于如何在几个连续的时间框架内搜索模式,以找到该模式在该时间范围内出现的最大次数。
我一直在使用 2 条移动平均线交叉,这是非常直接的。我想在混合中添加三分之一,我试图找出在 4 根蜡烛或更少的时间内检查是否发生这种情况。
对于两个移动平均线,我使用了以下内容:
// if shift5MA > shift0MA
if (shift5MAArray[1] > shift0MAArray[1]) {
//if shift5MA < shift0MA VALID SELL
if (shift5MAArray[2] < shift0MAArray[2]) {
signal = "sell";
}
}
if (shift5MAArray[1] < shift0MAArray[1]) {
//if shift5MA > shift0MA
if (shift5MAArray[2] > shift0MAArray[2]) {
signal = "buy";
}
}
Run Code Online (Sandbox Code Playgroud)
我如何检查 3 条移动平均线何时在 4 根蜡烛或更少的时间内相互交叉,如图像中的三个交叉:
我已经使用 MQL4 语言实现了一个要在 MetaTrader 中执行的智能交易系统。
现在,如果我需要执行它,我总是需要运行 MetaTrader 并将我的 EA 程序附加到其中的实时货币对图表。
我想知道是否有一种方法可以在服务器中执行 MQL4 脚本,这样我就不需要让我的计算机始终处于开启状态。我用谷歌搜索了这个问题,但我找不到合适的答案。
我发现有一种方法可以将数据从 MetaTrader 传输到网络服务器(MQL 到 PHP),但我不知道它是否有助于解决我的问题(http://mql4-php.iinuu.eu/)
提前致谢。
如果您不知道,ex4 文件是用 MQL 语言(自动交易机器人)创建的文件。
有一个反编译器可以反编译此类文件的旧版本,但是在版本 600 之后没有反编译器。
我有需要反编译的有价值的 EA(外汇机器人)。你能帮我吗?
我已经使用 MQL5 创建了一个指标。
分析后,我读到的程序说我的 CPU 的 99% 被我的OnCalculate().
这是我的功能:
int OnCalculate( const int rates_total,
const int prev_calculated,
const int begin,
const double &price[]
)
{
//--- check for bars count
float tempprice[];
ArrayResize( tempprice, ArraySize( price ) );
if ( rates_total < InpMAPeriod - 1 + begin ) return( 0 ); // not enough bars for calculation
//--- first calculation or number of bars was changed
if ( prev_calculated == 0 ) ArrayInitialize( ExtLineBuffer, 0 );
ArrayCopy( tempprice, …Run Code Online (Sandbox Code Playgroud) 我一直在试图弄清楚如何将我的 MQL4 代码更改为 MQL5。到目前为止,我已经能够更改 RSI 和 MACD 条件以及 SendOrder(),但是还有很多,例如 ModifyOrder() 和 CloseOrder() 以及我无法完成的其他事情。我知道这是一口口水,但我真的很感激在完成这个过程中得到一些帮助。
这是原始 MQL4 代码:
extern int MagicNumber=112223;
extern double Lots =0.005;
extern double StopLoss=0;
extern double TakeProfit=0;
extern int TrailingStop=0;
extern int Slippage=3;
int mode_main = 0;
int mode_signal = 1;
//+------------------------------------------------------------------+
// expert start function
//+------------------------------------------------------------------+
int start()
{
double MyPoint=_Point;
if(Digits==3 || Digits==5) MyPoint=Point*10;
double TheStopLoss=0;
double TheTakeProfit=0;
if( TotalOrdersCount()==0 )
{
int result=0;
if((iMACD(NULL,PERIOD_M5,12,26,9,PRICE_CLOSE,mode_signal,0)<iMACD(NULL,PERIOD_M5,12,26,9,PRICE_CLOSE,mode_main,0))&&(iRSI(NULL,PERIOD_M5,2,PRICE_CLOSE,0)>84)) // Here is your open buy rule
{
result=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"EA",MagicNumber,0,Blue);
if(result>0)
{ …Run Code Online (Sandbox Code Playgroud)