double T ;
int start()
{
T = MarketInfo("EURUSD",MODE_HIGH); // в глобальную переменную Т запоминаем максимум дневной свечи,который должна возвращать MarketInfo ( )
Print (" corresponds to ", T ); //
if ( T > iHigh( Symbol (), 0,10)) // если максимум текущей дневной свечи > High свечи N10(ТФ60 мин)OrderSend(Symbol(),OP_SELL,0.1,Bid,1,0,0,"jfh",123 ); открыть ордер
}
return;
ПРОБЛЕМА
1.Ордер не открывается
2.Print() постоянно возвращает 0
ПРИМЕЧАНИЕ.
Для открытия ордера - мне нужной сравнивать параметры свечей разных ТФ(60 мин и 1440 мин.)
Подскажите пожалуйста как это можно сделать.
Спасибо.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Возвращает суммарный профит в валюте депозита |//| закрытых с определённой даты позиций |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//| dt - Дата и время в секундах с 1970 года ( 0 - с начала истории) |//+----------------------------------------------------------------------------+double GetProfitFromDateInCurrency(string sy="", int op=-1, int mn=-1, datetime dt=0)
{
double p=0;
int i, k=OrdersHistoryTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (mn<0 || OrderMagicNumber()==mn) {
if (dt<OrderCloseTime()) {
p+=OrderProfit()+OrderCommission()+OrderSwap();
}
}
}
}
}
}
return(p);
}
当你打开并更新图表时,一个对新数据的请求就会进入服务器。一些贪婪的经纪公司宁愿把钱花在自己的口袋里,而不是花在更强大的服务器和更广泛的渠道上。他们必须限制来自终端的请求数量,以便弱小的服务器不会被 "挂断"。MRC每天只有2000个请求。这比他们的工具数量乘以TF的数量要少10倍,这还不算交易请求。
。
包含在MQL4中有助于精简代码。例如,在我的代码中,3000行的指标是这样的。
问题是,我见过的库,以及文档中提到的,inludes通常被放在代码的最顶端,即声明全局变量 的地方。如果在inludes中存在函数,那么在一个声明全局变量的地方,事实上会有一个函数在那个地方,或者说有某种变量,这似乎很奇怪。代码不是这样写的。如果在专家顾问中使用的变量和外部自定义变量是在顶部声明的,那么就没有人在它们旁边放函数!但他们把嵌体和功能放在一起,而且据我所知,这被认为是正常的。这 就是我在这里最困惑的地方。
这似乎不符合逻辑...
另一方面,如果在某个地方放置一个内联,而不是几个函数,这些函数负责获取,比如说,某个属性的交易信号,这将是一件合乎逻辑和可读的事情。
不幸的是,编译器不允许在一个模块中多次使用一个包容。这通常是一种节省重复性代码的方法。
大家下午好。
学习MarketInfo()和Print()函数
下面是一个使用这些函数的简单代码
测试仪,TF 60分钟。
图表中的请求看起来像CopyRates ArrayCopySeries请求,而不是RefreshRates请求。CopyRates是唯一移动服务器的非交易功能。
检查了RefreshRates()。如果这个专家顾问运行,例如在欧元兑美元上,并且在设置中插入了另一个窗口很久没有打开的工具(这样历史记录就不存在了),历史记录就会出现。
所以,仍然是RefreshRates()指的是服务器,并填补了历史记录。因此,控制历史的到来是必要的。
支持部门说,没有一个功能是直接指向服务器的。一切都是通过终端进行的:-)。
如果你使用GetProfitFromDateInCurrency()(原版--这很重要:我不知道你在你的版本中可能得到了什么),那么该函数应该像这样调用。
而该函数将返回自当日开始关闭的订单的利润。
而且你可以用Print()捕捉代码中所有愚蠢的东西。
它不起作用。它显示整个历史上所有可用的交易利润。
这是原始函数,当然,我没有改变其中的任何东西
这里是它的调用和打印
检查了RefreshRates()。如果这个专家顾问运行,例如在欧元兑美元上,并且在设置中插入了另一个窗口很久没有打开的工具(这样历史记录就不存在了),历史记录就会出现。
所以,仍然是RefreshRates()指的是服务器,并填补了历史记录。因此,控制历史的到来是必要的。
支持部门说,没有一个功能是直接指向服务器的。因此,一切都通过终端完成 :-)
瓦迪姆,我在一个终端上运行了你的脚本,在这个终端上,除了主力和与日元的交叉盘,我从来没有开过任何工具。总之,这里有一张截图。
从评论来看,没有任何东西被抽走,因为市场数据阵列是空的......。
瓦迪姆,我在一个终端上运行了你的脚本,在这个终端上,除了主力和与日元的交叉盘,我从来没有开过任何工具。总之,这里有一张截图。
从评论来看,没有任何东西被抽走,因为市场数据阵列是空的,...
是的,他也没有注意到,他的专家顾问中有MarketInfo(),而不仅仅是RefreshRates()。
检查了RefreshRates()。如果这个专家顾问运行,例如在欧元兑美元上,并且在设置中插入了另一个窗口很久没有打开的工具(这样历史记录就不存在了),历史记录就会出现。
所以,仍然是RefreshRates()指的是服务器,并填补了历史记录。因此,控制历史的到来是必要的。
支持部门说,没有一个功能是直接指向服务器的。因此,一切都通过终端完成 :-)
想象力的水平令人印象深刻。为什么数据只出现在某些符号上(没有打开),而不是在市场审查中的所有符号上?RefreshRates()函数是如何知道有些符号应该被更新,有些不应该被更新?
顺子,别胡思乱想了。
不起作用。输出整个历史中所有可用的交易利润。
这里是原始函数,当然我没有改变其中的任何东西
这里是它的调用和打印
所以一切都很正确。你逐行 "阅读 "函数,了解它是如何工作的,如果你太无聊了,无法自己写,一切都会水到渠成......
你有一个函数参数。
是最后一天的开仓时间,也就是说,所有在当日开仓前平仓的头寸都会被计算出来,并进行加总!这有意义吗?所以要设定另一个标准,这是必须的,或者说是什么。但这要看你怎么看。
是的,他也没有注意到,他的专家顾问中有MarketInfo(),而不仅仅是RefreshRates()。
也是所有的功能。
DoubleToStr(iOpen(sTool, 0, i), Digits), ", DoubleToStr(iLow(sTool, 0, i), Digits), ", DoubleToStr(iHigh(sTool,0, i), Digits), " ", DoubleToStr
(iClose(sTool, 0, i), Digits), " , DoubleToStr(iVolume(sTool, 0, i), 0), "\n")。
自然,数据会被更新。