新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 182 1...175176177178179180181182183184185186187188189...1953 新评论 Evgenii 2017.04.21 19:54 #1811 Artyom Trishkin: 而且你还没有展示你的一段代码--不清楚你为什么要展示一个例子。struct p{double trailingProfit;int orders[10];bool flagOpen;// флаг , указывающий на открытость позиции//тут еще куча связанных параметров};p order[];int OrderN=-1;int OnInit() { ArrayResize(pair,1,1000); return(INIT_SUCCEEDED); }void openOrder(price){ OrderN++; int t; ArrayResize(orders,order+1); t=OrderSend(Symbol(),OP_BUYSTOP,2,(NormalizeDouble(price,Digits)),3,0,0,"pair",MAGICN,0,Blue); if(t==0) Print("не удалось выставить ордер BUYSTOP ", price); for(intj=0,j<10,++j){ if(orders[OrderN].orders==0) orders[OrderN].orders=t; break; } orders[OrderN].flagOpen=1;}//...... тут идет обработка позиций...void massCut(){// нужна вот такая функция} 当EA工作了很长时间后,阵列变得太大,无法处理,我们需要减少它。所有旧的已关闭的订单都在开头,第一个发现的开放订单之后的所有东西都应该被留下。 Any questions from newcomers KARAUL!!!帮助。还有4小时45分钟!!!。 How can i convert Artyom Trishkin 2017.04.21 20:08 #1812 Evgenii: ... 当EA运行了很长时间后,阵列变得太大,无法处理,我们需要减少它。所有旧的已关闭的订单都在开头,第一个发现的开放订单之后的一切都应该留下。当EA重新启动时,结构阵列会发生什么变化? Evgenii 2017.04.21 20:14 #1813 Artyom Trishkin:当EA重新启动时,结构阵列会发生什么变化? 阵列会崩溃,这个问题还没有得到解决。 Artyom Trishkin 2017.04.21 21:09 #1814 Evgenii: 阵列将被删除,这个问题还没有得到解决。在那里。而这一点在一开始就应该被考虑。结论是显而易见的:数组必须被清零,然后用订单和头寸的当前状态重新填入。但这只应在你捕捉到账户中订单 或头寸数量 的变化时进行。你手头永远只有订单和头寸的当前状态,不需要费力从数组中消除不存在的订单/头寸。而订单/仓位列表将不得不完全滚动浏览,或在一定的历史时期内,但只有在特定情况下--当账户中的订单/仓位数量发生变化时,才会滚动浏览。 Pavel Verveyko 2017.04.21 21:31 #1815 Alexey Viktorov: 为什么需要这种变态的东西? 这样onInit就不会在每次重新初始化时旋转,并将静态数组 减少为一个实例,因为在某些地方它被写了两次......一般来说,这是资源优化。......我将保持现状,目前比较简单。 Pavel Verveyko 2017.04.21 21:32 #1816 LRA: 你声明了一个全局数组而没有指定大小。你的函数通过ArrayResize设置其大小。而它在全球范围内是可见的,OnInit被释放... 不太对,数组是静态的,有明确定义的值,单独初始化它没有意义( Alexey Viktorov 2017.04.22 07:30 #1817 Money_Maker: 以防止OnInit在每次重新初始化时旋转,并将静态数组 减少到一个实例,因为在某些地方它被写了两次......一般来说,这是资源优化。......我还是保持现在的样子吧。 为了避免在每次重新初始化时在OnOnit()中循环,只需检查去初始化的原因UninitializeReason(),我就不会再得到什么。减少静态阵列是什么意思?嗯,一般来说,你更清楚。 Andrey Dik 2017.04.22 08:59 #1818 在MT4测试器中不考虑佣金吗? Alexey Viktorov 2017.04.22 11:46 #1819 Andrey Dik: 在MT4测试器中不考虑佣金吗? 似乎你必须连接到一个有佣金的账户,才会被考虑在内。 виталик 2017.04.22 19:41 #1820 关于Print()函数 的问题;如何使Print()在EA中打印出数据和日期(日)?帮助初学者了解plz,把代码重新制作,为了实验,事先诱导 "pivot "cbs!代码本身。PivotsDaily v2.mq4#property indicator_chart_window#property indicator_buffers 3#property indicator_color1 Lime#property indicator_color2 Blue#property indicator_color3 Red//---- 输入参数外在的CountBars=300。//---- 缓冲区双重PBuffer[]。双重S1Buffer[]。双倍R1Buffer[]。string Pivot="P", Sup1="S 1", Res1="R 1"。int fontsize=10。双P,S1,R1,S2,R2,S3,R3。double LastHigh,LastLow,x;//+------------------------------------------------------------------+//|Custor指示器去初始化功能|//+------------------------------------------------------------------+int deinit(){ObjectDelete("Pivot")。ObjectDelete("S1")。ObjectDelete("R1")。return(0);}//+------------------------------------------------------------------+//|自定义指标初始化函数//+------------------------------------------------------------------+int init(){string short_name;IndicatorBuffers(7)。//---- 指标线SetIndexStyle(0,DRAW_ARROW,2,1,Lime)。SetIndexArrow(0,158);SetIndexStyle(1,DRAW_ARROW,2,1,Blue)。SetIndexArrow(1,158);SetIndexStyle(2,DRAW_ARROW,2,1,Red)。SetIndexArrow(2,158);SetIndexBuffer(0,PBuffer)。SetIndexBuffer(1,S1Buffer)。SetIndexBuffer(2,R1Buffer)。//---- DataWindow和指标子窗口标签的名称short_name="Pivot"。IndicatorShortName(short_name)。SetIndexLabel(0,short_name)。short_name="R1"。IndicatorShortName(short_name)。SetIndexLabel(2,short_name)。short_name="S1"。IndicatorShortName(short_name)。SetIndexLabel(1,short_name)。SetIndexDrawBegin(0,6)。//----return(0);}//+------------------------------------------------------------------+//|自定义指标迭代函数|//+------------------------------------------------------------------+int start(){int counted_bars=IndicatorCounted()。int limit, i;//---- 指标计算如果(counted_bars==0){x=Period()。如果(x>CountBars)返回(-1)。ObjectCreate("Pivot", OBJ_TEXT, 0, 0,0);ObjectSetText("Pivot", " Pivot",10, "Arial",Lime);ObjectCreate("S1", OBJ_TEXT, 0, 0, 0)。ObjectSetText("S1", " S1",10, "Arial",Blue);ObjectCreate("R1", OBJ_TEXT, 0, 0, 0)。ObjectSetText("R1", " R1",10, "Arial",Red);}if(counted_bars<0) return(-1);limit=(Bars-counted_bars)-1。for (i=limit; i>=0;i--){如果(TimeDayOfWeek(Time[i]) !=0){如果(High[i+1]>LastHigh)LastHigh=High[i+1]。如果(Low[i+1]<LastLow)LastLow=Low[i+1]。}如果(TimeDay(Time[i])!=TimeDay(Time[i+1]) && TimeDayOfWeek(Time[i])!=0){P=Close[i+1]。R1 = LastLow。S1 = LastHigh。S2=高[i]-低[i]。S3=High[i]-Open[i+1];如果(S3==0){R2=S3;}否则{R2 = S2/S3;}。Print("R2",R2); // <= 我如何让打印机加上数据来打印日期?LastLow=Open[i]; LastHigh=Open[i];ObjectMove("Pivot", 0, Time[i],P);ObjectMove("S1", 0, Time[i],S1);ObjectMove("R1", 0, Time[i],R1);}PBuffer[i]=P。S1Buffer[i]=S1。R1Buffer[i]=R1。}//----return(0);} Any questions from newcomers 哪位兄弟能帮我改一下这段代码,谢谢!!! How to change this 1...175176177178179180181182183184185186187188189...1953 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
而且你还没有展示你的一段代码--不清楚你为什么要展示一个例子。
struct p{
double trailingProfit;
int orders[10];
bool flagOpen;// флаг , указывающий на открытость позиции
//тут еще куча связанных параметров
};
p order[];
int OrderN=-1;
int OnInit()
{
ArrayResize(pair,1,1000);
return(INIT_SUCCEEDED);
}
void openOrder(price){
OrderN++;
int t;
ArrayResize(orders,order+1);
t=OrderSend(Symbol(),OP_BUYSTOP,2,(NormalizeDouble(price,Digits)),3,0,0,"pair",MAGICN,0,Blue);
if(t==0) Print("не удалось выставить ордер BUYSTOP ", price);
for(intj=0,j<10,++j){
if(orders[OrderN].orders==0) orders[OrderN].orders=t;
break;
}
orders[OrderN].flagOpen=1;
}
//...... тут идет обработка позиций...
void massCut(){
// нужна вот такая функция
}
当EA重新启动时,结构阵列会发生什么变化?
当EA重新启动时,结构阵列会发生什么变化?
阵列将被删除,这个问题还没有得到解决。
在那里。而这一点在一开始就应该被考虑。
结论是显而易见的:数组必须被清零,然后用订单和头寸的当前状态重新填入。但这只应在你捕捉到账户中订单 或头寸数量 的变化时进行。
你手头永远只有订单和头寸的当前状态,不需要费力从数组中消除不存在的订单/头寸。而订单/仓位列表将不得不完全滚动浏览,或在一定的历史时期内,但只有在特定情况下--当账户中的订单/仓位数量发生变化时,才会滚动浏览。
为什么需要这种变态的东西?
这样onInit就不会在每次重新初始化时旋转,并将静态数组 减少为一个实例,因为在某些地方它被写了两次......一般来说,这是资源优化。
......我将保持现状,目前比较简单。
你声明了一个全局数组而没有指定大小。你的函数通过ArrayResize设置其大小。而它在全球范围内是可见的,OnInit被释放...
不太对,数组是静态的,有明确定义的值,单独初始化它没有意义(
以防止OnInit在每次重新初始化时旋转,并将静态数组 减少到一个实例,因为在某些地方它被写了两次......一般来说,这是资源优化。
......我还是保持现在的样子吧。
在MT4测试器中不考虑佣金吗?
关于Print()函数 的问题;如何使Print()在EA中打印出数据和日期(日)?帮助初学者了解plz,把代码重新制作,为了实验,事先诱导 "pivot "cbs!
代码本身。PivotsDaily v2.mq4
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Lime
#property indicator_color2 Blue
#property indicator_color3 Red
//---- 输入参数
外在的CountBars=300。
//---- 缓冲区
双重PBuffer[]。
双重S1Buffer[]。
双倍R1Buffer[]。
string Pivot="P", Sup1="S 1", Res1="R 1"。
int fontsize=10。
双P,S1,R1,S2,R2,S3,R3。
double LastHigh,LastLow,x;
//+------------------------------------------------------------------+
//|Custor指示器去初始化功能|
//+------------------------------------------------------------------+
int deinit()
{
ObjectDelete("Pivot")。
ObjectDelete("S1")。
ObjectDelete("R1")。
return(0);
}
//+------------------------------------------------------------------+
//|自定义指标初始化函数
//+------------------------------------------------------------------+
int init()
{
string short_name;
IndicatorBuffers(7)。
//---- 指标线
SetIndexStyle(0,DRAW_ARROW,2,1,Lime)。
SetIndexArrow(0,158);
SetIndexStyle(1,DRAW_ARROW,2,1,Blue)。
SetIndexArrow(1,158);
SetIndexStyle(2,DRAW_ARROW,2,1,Red)。
SetIndexArrow(2,158);
SetIndexBuffer(0,PBuffer)。
SetIndexBuffer(1,S1Buffer)。
SetIndexBuffer(2,R1Buffer)。
//---- DataWindow和指标子窗口标签的名称
short_name="Pivot"。
IndicatorShortName(short_name)。
SetIndexLabel(0,short_name)。
short_name="R1"。
IndicatorShortName(short_name)。
SetIndexLabel(2,short_name)。
short_name="S1"。
IndicatorShortName(short_name)。
SetIndexLabel(1,short_name)。
SetIndexDrawBegin(0,6)。
//----
return(0);
}
//+------------------------------------------------------------------+
//|自定义指标迭代函数|
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted()。
int limit, i;
//---- 指标计算
如果(counted_bars==0)
{
x=Period()。
如果(x>CountBars)返回(-1)。
ObjectCreate("Pivot", OBJ_TEXT, 0, 0,0);
ObjectSetText("Pivot", " Pivot",10, "Arial",Lime);
ObjectCreate("S1", OBJ_TEXT, 0, 0, 0)。
ObjectSetText("S1", " S1",10, "Arial",Blue);
ObjectCreate("R1", OBJ_TEXT, 0, 0, 0)。
ObjectSetText("R1", " R1",10, "Arial",Red);
}
if(counted_bars<0) return(-1);
limit=(Bars-counted_bars)-1。
for (i=limit; i>=0;i--)
{
如果(TimeDayOfWeek(Time[i]) !=0)
{
如果(High[i+1]>LastHigh)LastHigh=High[i+1]。
如果(Low[i+1]<LastLow)LastLow=Low[i+1]。
}
如果(
TimeDay(Time[i])!=TimeDay(Time[i+1]) && TimeDayOfWeek(Time[i])!=0
)
{
P=Close[i+1]。
R1 = LastLow。
S1 = LastHigh。
S2=高[i]-低[i]。
S3=High[i]-Open[i+1];
如果(S3==0)
{R2=S3;}否则{R2 = S2/S3;}。
Print("R2",R2); // <= 我如何让打印机加上数据来打印日期?
LastLow=Open[i]; LastHigh=Open[i];
ObjectMove("Pivot", 0, Time[i],P);
ObjectMove("S1", 0, Time[i],S1);
ObjectMove("R1", 0, Time[i],R1);
}
PBuffer[i]=P。
S1Buffer[i]=S1。
R1Buffer[i]=R1。
}
//----
return(0);
}