externint sec=60;//объявляем количество секундint i;//будет индексом текущей "свечи" (тика)int i_prev;//будет индексом предыдущей "свечи" (тика), отстоящего от теущего на sec секунд назадdouble MyBuffer[];//этот будет на чартеdouble MyTemp[];//этот только для подсчётовint init(){
IndicatorBuffers(2);
SetIndexBuffer(0,MyBuffer)
SetIndexBuffer(1,MyTemp)
SetIndexDrawBegin(0,14);
i=Bars-1;
while(Volume[i]-Volume[Bars-1]<sec) i--;//потому что в Volume[] на тиковом у нас время сервера точностью до секунды (а в Time[] - моделируемое для предоставления тиков на чарте)
i_prev=Bars-1;//отошли от первого исторического тика на чарте на заданное количество секунд, запомнили его, запомнили первый, уходим в start()return(0);
}
int start(){
double deltaHigh,deltaLow;
int counted_bars=IndicatorCounted();//честно говоря, не уверен, т.к. считаем мы не все "свечи" (тики)if(counted_bars>=i) i=Bars-counted_bars-1;//аналогичноwhile(i>=0){//цикл обработчика
deltaHigh=High[i]-High[i_prev];//к примеру
deltaLow=Low[i_prev]-Low[i];
//и дальше код обработчика (формируем предварительный массив MyTemp[]). В конце цикла:
i_prev=i;//запоминаем теперь текущий индекс как индекс предыдущего тикаwhile(Volume[i_prev]-Volume[i]<sec){//и уходим вперёд на заданное количество секунд
i--;
}
}
...
现在的问题是。在纯M1版本中,接下来的事情是标准的。
if(counted_bars>0) counted_bars--;
int limit=Bars-counted_bars;//принтовал, при первом обращении limit=Bars-2, при последующих limit=2for(i=0; i<=limit; i++){
MyBuffer[i]=iMAOnArray(MyTemp, 0, 14, 0, MODE_EMA, i);
用什么来代替limit和counted_bars?我的理解是。
int counted_bars=ArraySize(MyTemp)-1;//сразу после цикла while
#include <MASSIV.mqh> int start()
{
double Price=iOpen (Symbol (),0,0);
double SL=NormalizeDouble (Price+3000*Point, Digits);
double TP=NormalizeDouble (Price-100*Point, Digits);
double value = Bid ;//параметру value функции ArrayBsearch присваивается значение цены последнего тикаdouble ld_Delta = 0.0010;
int S = ArrayBsearch( mass, value, WHOLE_ARRAY, 0, MODE_ASCEND);//функция возвращает индекс значения цены макс. близкой к цене последнего тика int last_order_bar = 0;
int ot = OrdersTotal();
...............................(остальной код опустил,но он не изменился)
我找不到重新绘制自定义指标的命令。如果有人知道,请告诉我。提前感谢 =)
我已经找到了。谢谢大家=)
下午好。
你能帮我想出一个公式吗?
我有一个补给步骤SD=100。
如果价格是25,那么对它来说,封顶水平将是DE=100
如果价格是102,其单位率将是UD=200
如果价格为215,则充值率为BP=300
价格再次跌至135,见顶的水平将是UD=200
而这种事情的顺序是正常的(这些是终端的原则)。
如果你想让指标B 在指标A 的参数发生变化时改变其指示,在指标之间进行信息交换(可以是文件、终端的全局变量、计算机RAM):指标A 在初始化时传递其可初始化的参数,指标B 定期检查指标A 的可能参数变化。
第一个代码是指标A。
第二个代码指标B。
上一个问题已经解决了,新的问题是
我在每个酒吧都重新计算了补给水平。
我怎样才能记住最后一栏的水平?
并用它来打开一个交易
谢谢你的答复,但我不能使用它,因为我不了解所有的东西,也不太擅长编程。
你提供我为你做你正在 "玩 "的事情。对不起,不感兴趣。
而且,如果你正在学习编程,这对你来说是一项有趣的任务。
int counted_bars=IndicatorCounted();
我理解以下结构。
现在的问题是。在纯M1版本中,接下来的事情是标准的。
用什么来代替limit和counted_bars?我的理解是。
(因为60秒内的刻度数不是恒定的,也就是说,只写int counted_bars=IndicatorCounted()/_number_of_ ticks_in_60_seconds_是不行的)。
还是我什么都错了?
p.s. 在一个可能的问题之前,我将回答:我知道在外汇市场上sec!=60是不适用的,sec=60是没有意义的,但我也不在外汇市场上交易。
谢谢你的答复,但我不能使用它,因为我不了解所有的东西,也不擅长编程,能否请你对我的指标代码做必要的修改。
大家下午好!
我正在学习使用数组。
我有一个数组。我已经用字符串初始化了它,即 双倍质量[3567]={0.85374 , 0.85694 , 0.85974 , ....};
而程序读取了数组并执行了它。
现在我已经将同一个数组初始化为一列
双倍的Massi[3567]
{
质量[ 0] = 0.85374;
质量[ 1] = 0.85694;
质量 [ 2 ] = 0. 85974;
质量 [ 3 ] = 0.86174;
质量 [ 4] = 0.86474;
质量 [ 5] = 0.86494;
质量 [ 6] = 0.86504。
质量[ 7] = 0.86524。
}
编译器 没有产生任何错误,但产生了一个警告。
'{' - 全局范围的表达不允许 C:\Program Files\Alpari NZ MT4(2)\experts\include\MASSIV.mqh (4, 2)
数组像以前一样被全局声明(当时用字符串初始化,工作正常)。
日志中只有2个条目。
2013.04.12 16:14:44 XXX测试开始
2013.04.12 16:14:36 XXX EURUSD,H1:加载成功
问题:为什么程序不能读取一列初始化的数组?
谢谢你。