inputint StopLoss=30; // Stop Lossinputint TakeProfit=100; // Take Profitinputdouble Lot=0.1; // Количество лотов для торговлиint A; ////+------------------------------------------------------------------+voidOnTick()
{
//Print( "====================================================", TimeCurrent() ) ;//--- Объявляем структуры, которые будут использоваться для торговлиMqlTick latest_price; // Будет использоваться для текущих котировокMqlTradeRequest mrequest; // Будет использоваться для отсылки торговых запросовMqlTradeResult mresult; // Будет использоваться для получения результатов выполнения торговых запросовMqlDateTime time_now;// Будет использоваться дляTimeCurrent(time_now); if(!SymbolInfoTick(_Symbol,latest_price))
if(time_now.hour==10&&time_now.min==0)
{
mrequest.action = TRADE_ACTION_DEAL; // немедленное исполнение
mrequest.price = NormalizeDouble(latest_price.bid,_Digits); // последняя цена Bid
mrequest.sl = NormalizeDouble(latest_price.ask + StopLoss*_Point,_Digits); // Stop Loss
mrequest.tp = NormalizeDouble(latest_price.ask - TakeProfit*_Point,_Digits); // Take Profit
mrequest.symbol = _Symbol; // символ
mrequest.volume = Lot; // количество лотов для торговли
mrequest.type= ORDER_TYPE_SELL; // ордер на продажу
mrequest.type_filling = ORDER_FILLING_RETURN; // тип исполнения ордера - все или ничего
mrequest.deviation=100; // проскальзывание от текущей цены//--- отсылаем ордерOrderSend(mrequest,mresult);
}
return;
}
我做错了什么?
我把我添加和改变的代码涂上颜色
这是它在日志文件中所说的
FD 0 10:57:05.453 Core 1 agent process started on 127.0.0.1:3000
CS 0 10:57:05.453 Core 1 连接到127.0.0.1:3000。
JD 0 10:57:05.953 Core 1 已连接。
OD 0 10:57:05.975 Core 1 authorized (agent build 2650)
struct PointPriceTime
{
double price;
datetime time;
PointPriceTime(double p, datetime t) { price=p; time=t; };
void Set(double p, datetime t){ price=p; time=t;};
PointPriceTime(PointPriceTime &p){ price=p.price; time=p.time; };
PointPriceTime() { price=0.0; time=0; };
};
double Angle(PointPriceTime &p1,PointPriceTime &p2) // возвращает угол в градусах в приведенной системе координат price-price, где по оси X
{ // расстояние между x1 и x2 = N*_Point, где N - количество минутных баров во временном промежутке отрезка. staticint tf[9]= {PERIOD_M1,PERIOD_M5,PERIOD_M15,PERIOD_M30,PERIOD_H1,PERIOD_H4,PERIOD_D1,PERIOD_W1,PERIOD_MN1};
int i=0;
while(i<9 && SeriesInfoInteger(_Symbol,tf[i],SERIES_FIRSTDATE)>p1.time)
i++;
if(i==9)
{
Print("Время левой границы вне диапазона исторических данных");
returnDBL_MAX;
}
int bar1 = iBarShift(_Symbol,tf[i],p1.time);
int bar2 = iBarShift(_Symbol,tf[i],p2.time);
if(bar1==bar2)
return0.0;
returnatan((p2.price-p1.price)/((bar1-bar2)*PeriodSeconds(tf[i])*_Point/60))*180/M_PI;
}
如果一天有1440个订单,就应该在分钟开始时进行检查,或者更简单地说,在分钟栏的出现时进行检查。而在这一点上,要打开。你没有,所以EA在每一个tick点开仓,这本身就是一个严格的条件,根据我们符号在当前报价的条件。这一条件可能没有得到满足,因此会漏掉蜱虫。而在某些时候,会发生一个关键的错误。
另外,订单执行 的类型(执行交易的订单,建立一个头寸)全部或没有。
我明白。谢谢你的帮助。
我也认为我的EA很难开出这么多订单。我试着用这个代码来限制订单的数量
也就是说,只在10点开一个订单。但结果是一样的。
2020.10.27 10:25:17.548 Core 1 272 Mb内存的使用,包括36 Mb的历史数据,64 Mb的tick数据。
我做错了什么?
我把我添加和改变的代码涂上颜色
这是它在日志文件中所说的
FD 0 10:57:05.453 Core 1 agent process started on 127.0.0.1:3000
CS 0 10:57:05.453 Core 1 连接到127.0.0.1:3000。
JD 0 10:57:05.953 Core 1 已连接。
OD 0 10:57:05.975 Core 1 authorized (agent build 2650)
JL 0 10:57:05.980 Tester EURUSD,M1 (Alpari-MT5-Demo): 测试 experts\GRAAL.ex5 从 2020.09.01 00:00 到 2020.09.10 00:00
ON 0 10:57:05.997 Core 1 普通同步完成。
CJ 0 10:57:06.223 Tester 分析的历史质量为100%。
LM 0 10:57:06.248 Core 1 MetaTester 5在127.0.0.1:3000启动。
EJ 0 10:57:06.248 Core 1 初始化完成。
LS 0 10:57:06.248 Core 1 登录(build 2650)。
KO 0 10:57:06.248 Core 1 4372字节的账户信息被加载。
LI 0 10:57:06.248 Core 1 1482字节的测试器参数被加载。
FN 0 10:57:06.248 Core 1 1724字节的输入参数被加载。
OK 0 10:57:06.248 Core 1 423字节的符号列表被加载(72个符号)。
HO 0 10:57:06.248 Core 1 专家文件添加: Experts\GRAAL.ex5已加载13680字节
CP 0 10:57:06.248 Core 1 4077 Mb可用,50块设置为ticks生成。
DI 0 10:57:06.248 Core 1 以点计算利润,初始存款10000,杠杆1:100
LP 0 10:57:06.248 Core 1 成功初始化。
RI 0 10:57:06.248 Core 1 共收到15 Kb的初始化数据。
DN 0 10:57:06.248 Core 1 Intel Core i5-6400 @ 2.70GHz, 7883 MB
IG 0 10:57:06.248 Core 1 EURUSD:要同步的符号
RS 0 10:57:06.248 Core 1 EURUSD:符号同步,收到3720字节的符号信息
OL 0 10:57:06.248 Core 1 EURUSD: 在0:00:00.003加载27字节的历史数据进行同步。
EK 0 10:57:06.248 Core 1 EURUSD: 历史记录从2019.01.02同步到2020.10.23
LK 0 10:57:06.248 Core 1 EURUSD,M1: 历史缓存分配给628432条,包含619175条,从2019.01.02 06:00到2020.08.31 23:59
LH 0 10:57:06.248 Core 1 EURUSD,M1: 历史从2019.01.02 06:00开始
LN 0 10:57:06.248 Core 1 EURUSD,M1 (Alpari-MT5-Demo): OHLC条形状态正在生成。仅在条形图开始时执行OnTick
JM 0 10:57:06.248 Core 1 EURUSD,M1: 测试experts\GRAAL.ex5从2020.09.01 00:00到2020.09.10 00:00开始,输入。
LS 0 10:57:06.248 Core 1 StopLoss=30
PL 0 10:57:06.248 Core 1 TakeProfit=100
FJ 0 10:57:06.248 Core 1 Lot=0.1
DP 0 10:57:06.248 Core 1 最终余额 10000.00点
EE 0 10:57:06.248 Core 1 EURUSD,M1: 39553 ticks, 10068 bars generated.环境在0:00:00.031进行同步。测试在0:00:00.247通过(包括ticks预处理0:00:00.016)。
DE 0 10:57:06.248 Core 1 EURUSD,M1: 从登录到停止测试的总时间为0:00:00.278(包括历史数据同步的0:00:00.031)。
NQ 0 10:57:06.248 Core 1 272 Mb内存的使用,包括36 Mb的历史数据,64 Mb的tick数据。
KE 0 10:57:06.248 Core 1 日志文件 "C:\Users\a1960\AppData\Roaming\MetaQuotes\Tester\36A64B8C79A6163D85E6173B54096685\Agent-127.0.0.1-3000\logs\20201027.log "写入
OS 0 10:57:06.260 Core 1 连接关闭。
能否请你告诉我!?
为什么当新的刻度出现时,服务器的时间没有更新?
在EA启动的那一刻,一切都按部就班地进行,但时间过去后,当前分钟的新值却没有进入变量。
也就是说,专家顾问的工作取决于变量int M = TimeMinute(TimeCurrent())中获得的数字。
实际上这一行代码来自于参考文献,它不起作用。
例如,我在12点启动它-- 服务器返回的当前时间 与变量中的时间相对应,但随后变量仍停留在12点,尽管时钟上已经有15-20分钟了。
代码完全好了,更准确的是你在哪里创建函数,在哪个函数(OnInit, OnTick, OnTime)获得分钟的值并调用打印函数。如果在OnInit或终端函数字段之外,就应该是这样的。如果在OnTick中,它将在每个tick上打印,并以新的分钟来更新数值。
Valeriy Yastremskiy:
这段代码完全好了,更精确地说明了你在哪里创建函数,在哪个函数(OnInit、OnTick、OnTime)中获得分钟的值并调用打印函数。如果在OnInit或终端函数字段之外,就应该是这样的。如果在OnTick中,它将在每个tick上打印,并以新的分钟来更新数值。
好吧,这里是完整的代码。在void OnTick()函数中,它在一开始就被第一行执行的内容所触发。
它只在重新编译或追加到时间表/删除字段/的时刻被触发。在剩下的时间里,变量M持有EA第一次运行时获得的分钟值。
好吧,这里有一个完整的代码,这就是它的全部内容。空白的OnTick()在一开始就被第一个要执行的行触发了。
它只在重新编译或加入到图/删除字段/的时刻被触发。在剩下的时间里,变量M持有EA第一次运行时获得的分钟值。
明白了,谢谢!
我应该
把它放在函数的主体 中,而不是在它之前赋值给M
明白了,谢谢!
我应该
把它放在函数的主体 中,而不是在它之前分配M值。
你可以用不同的方式来做。读取全局和局部变量以及它们的可见性。
下午。试图从角度得到趋势线的角度。以下是代码。
角度始终为0。不管是使用标准库 方法还是内置函数。同时,也划定了界限。有什么问题吗?如何获得这个角度?
下午。试图从角度得到趋势线的角度。以下是代码。
角度始终为0。不管是使用标准库 方法还是内置函数。同时,也划定了界限。有什么问题吗?我怎样才能得到这个角度呢?
https://www.mql5.com/ru/forum/103591
我明白了,但你是如何计算角度的?
https://www.mql5.com/ru/forum/103591
我明白了,但你是如何计算角度的?
你是一个喜剧演员。
我在骗谁呢?
关于交易、自动交易系统和策略测试的论坛
新手对MQL4和MQL5的任何问题,对算法和代码的任何帮助和讨论
Nikolai Semko, 2020.10.26 00:34
你不应该害怕速度。这只是类型转换的一个条件性。
作为角度定义函数的一个变体。
在MT5之后,MT4的感觉实在是太糟糕了。对历史的访问在某种程度上被阉割了。我甚至不是在说虱子。
你能告诉我,这种字体选择在指标中是否可行?