任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 64 1...575859606162636465666768697071...1178 新评论 dmitrybiz 2013.08.03 14:33 #631 alexey1979621:亲爱的论坛网友,请你帮帮我。 if (TimeBar==Time[0]) return(0); double MA1 = NormalizeDouble(iMA(NULL,TimeFrame_2,MA_Period_2,MA_Shift_2,MA_Method_2,Applied_Price_2,0),Digits); //其中0是从当前条形图中移出的指定数值。向后的周期数 //double MA21 = NormalizeDouble(iMA(NULL,timeframe_2,period_2,ma_shift_2,ma_method_2,applied_price_2,2),Digits);double MA2 = NormalizeDouble(iMA(NULL,timeFrame_3,MA_Period_3,MA_Shift_3,MA_Method_3,Applied_Price_3,0),Digits); //double MA31 = NormalizeDouble(iMA(NULL,timeframe_3,period_3,ma_shift_3,ma_method_3,applied_price_3,2) ,Digits)double MA3 = NormalizeDouble(iMA(NULL,TimeFrame_4,MA_Period_4,MA_Shift_4,MA_Method_4,Applied_Price_4,0),Digits); double OsMA = NormalizeDouble(iOsMA(NULL,TimeFrame_5,FastEMA_5,SlowEMA_5,SignalSMA_5,Applied_Price_5,0) ,Digits。)如果(MaxOrders>b && Low[0]>=MathMax(MA1,MA2)&& Low[0]>MA3 && Ask>)MathMax(MA1,MA2)+DeltaOpen*Point && Ask>MA3 && MA2<MA3 && MA1<MA3 && OsMA>0 && Trade){ if (OrderSend(Symbol(,OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slippage,SL,TP, "Puria_1",Magic,0,Blue) ==-1) TimeBar=0; else TimeBar=Time[0]; }如果(MaxOrders>s &&High[0]<=MathMin(MA1,MA2) &&High[0]<MA3 && Bid<MathMin(MA1,MA2)-DeltaOpen*Point && Bid<MA3 && MA1>MA3 && MA2>MA3 && OsMA<0 && Trade){ if (OrderSend(Symbol(,OP_SELL,Lots,NormalizeDouble(Bid,Digits),Slippage,SL,TP, "Puria_1",Magic,0,Red) ==-1) TimeBar=0; else TimeBar=Time[0]; } return(0);在这些条件下,专家顾问开了一笔交易,比如说,在卖出时,在盈利时关闭,并立即在卖出时开了另一笔交易。如何在EA中规定,当收到信号时,只有一个交易应该打开,即一个信号-一个交易。 预先感谢你。 1个变体--要么检查交易条件,以便:指数2显示买入信号,指数1显示卖出信号,那么在指数为0的条形图开盘时,将打开一个卖出交易。 第二种方法是检查订单历史,比较信号和订单指数,如果它们相同,就不要再开任何订单。 Alexander 2013.08.03 14:37 #632 TimeBar变量在哪里以及如何初始化? 虽然这对你的情况没有什么帮助。我看到条件中的贸易变量,所以用它来调整开口。 Alekseu Fedotov 2013.08.03 15:14 #633 webman1988: 我已经挣扎了两天了,想不通。我需要找到过去n个柱子的最低价格,但不是从当前的柱子,而是从通过函数收到的柱子。该函数返回订单被打开的条形图的索引。这是我们需要通过历史上的n个条形来寻找最低价格的条形。下面是我的代码,它有什么问题吗? int n = 10; //баров в глубь истории index_bar= ND(iLow(Symbol(),0,i)); // начинаем с этого бара double val=Low[iLowest(NULL,0,MODE_LOW,n,index_bar)]; 像这样 dmitrybiz 2013.08.03 17:20 #634 r772ra: 类似这样的事情。 非常感谢您!也试着用这个函数,但又是在一个循环中,结果是简单的))))再次感谢! gyfto 2013.08.04 02:31 #635 FAQ: gyfto。 我有以下问题。如何拦截鼠标滚轮,有哪些winapi函数? 让我解释一下原因。在externs中有一个int参数。你需要旋转轮子来增加或减少它。 当你发现如何做到这一点时,请发布... 到目前为止,这只是它的工作方式。 #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 RoyalBlue #import "user32.dll" int GetKeyState(int nVirtKey);//обрабочик клавиатуры #import extern int period = 1; extern bool WinAPI = false;//включение-отключение перехвата клавиатуры extern string s1="Alt+ArrowUp - increment of period";//памятка extern string s2="Alt+ArrowDown - decrement of period"; extern string s3="Alt+Home - period=1"; double SMA[]; int Alt, ArrowUp, ArrowDown, Home; int init(){ SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,SMA); if(WinAPI){//запоминаем состояние клавиш Alt = GetKeyState(18); ArrowUp = GetKeyState(38); ArrowDown = GetKeyState(40); Home = GetKeyState(36); } return(0); } int deinit(){ if(WinAPI) Comment(" "); return(0); } int start(){ if(WinAPI){//ставим сконденсированный флаг и снова запоминаем состояние клавиш НА КАЖДОМ ТИКЕ int flag = ((Alt!=GetKeyState(18)) && Home==GetKeyState(36)) + 10*((Alt!=GetKeyState(18)) && (ArrowUp==GetKeyState(38))) + 100*((Alt!=GetKeyState(18)) && (ArrowDown==GetKeyState(40))); Alt = GetKeyState(18); ArrowUp = GetKeyState(38); ArrowDown = GetKeyState(40); Home = GetKeyState(36); } int counted_bars=IndicatorCounted(); if(WinAPI){//разводка сконденсированного флага; перед limit, чтобы отсюда эмулировать прикрепление к графику switch(flag){ case 11: if(period>1){ period--; counted_bars = 0; } break; case 101: period++; counted_bars = 0; break; case 110: period=1; counted_bars = 0; } } int limit = Bars - counted_bars - 1; /*Шпаргалка. В первый заход counted_bars = 0, limit = Bars - 1 (номер самого левого БАРа, т.к. считается с нуля) на первом тике нулевого бара counted_bars = Bars - 2, limit = 1 (пересчитаем предпоследний БАР) на следующих тиках counted_bars = Bars - 1, limit = 0 (нулевой, он же текущий, БАР)*/ if(WinAPI) Comment("flag=", flag, ", period=", period);//принтуем в коммент для визуализации for(int bar=0; bar<=period*(limit/period); bar++){//обычный цикл индикаторов SMA[bar] = iMA(NULL, 0, period, 0, MODE_SMA, PRICE_CLOSE, bar); } return(0); } Рустам 2013.08.04 08:12 #636 这并不有趣,问题出在鼠标滚轮劫持上 :https://www.mql5.com/ru/forum/139237 gyfto 2013.08.04 08:16 #637 常见问题,我是在接触这个主题之前看到这个主题的,所以我对你当时的反应并不惊讶) Рустам 2013.08.04 08:22 #638 问题出在钩子上,尽管我已经用更简单的方法解决了这个问题--如果有必要,我在一个DLL中制作自己的设置窗口,在那里我可以用Windows控件做我想做的事。 gyfto 2013.08.04 08:44 #639 正如Vadim告诉我不要使用MT4下的钩子,平台不喜欢它们,所以我不去碰它们。可能是白费功夫) Vadim Zhunko 2013.08.04 09:10 #640 gyfto: 正如Vadim告诉我不要使用MT4下的钩子,平台不喜欢它们,所以我不去碰它们。可能是白费功夫) 是MT4本身不喜欢钩子,但从它内部(从DLL)你可以将钩子应用于其他。 1...575859606162636465666768697071...1178 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
亲爱的论坛网友,请你帮帮我。
if (TimeBar==Time[0]) return(0); double MA1 = NormalizeDouble(iMA(NULL,TimeFrame_2,MA_Period_2,MA_Shift_2,MA_Method_2,Applied_Price_2,0),Digits); //其中0是从当前条形图中移出的指定数值。向后的周期数 //double MA21 = NormalizeDouble(iMA(NULL,timeframe_2,period_2,ma_shift_2,ma_method_2,applied_price_2,2),Digits);double MA2 = NormalizeDouble(iMA(NULL,timeFrame_3,MA_Period_3,MA_Shift_3,MA_Method_3,Applied_Price_3,0),Digits); //double MA31 = NormalizeDouble(iMA(NULL,timeframe_3,period_3,ma_shift_3,ma_method_3,applied_price_3,2) ,Digits)double MA3 = NormalizeDouble(iMA(NULL,TimeFrame_4,MA_Period_4,MA_Shift_4,MA_Method_4,Applied_Price_4,0),Digits); double OsMA = NormalizeDouble(iOsMA(NULL,TimeFrame_5,FastEMA_5,SlowEMA_5,SignalSMA_5,Applied_Price_5,0) ,Digits。)如果(MaxOrders>b && Low[0]>=MathMax(MA1,MA2)&& Low[0]>MA3 && Ask>)MathMax(MA1,MA2)+DeltaOpen*Point && Ask>MA3 && MA2<MA3 && MA1<MA3 && OsMA>0 && Trade){ if (OrderSend(Symbol(,OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slippage,SL,TP, "Puria_1",Magic,0,Blue) ==-1) TimeBar=0; else TimeBar=Time[0]; }如果(MaxOrders>s &&High[0]<=MathMin(MA1,MA2) &&High[0]<MA3 && Bid<MathMin(MA1,MA2)-DeltaOpen*Point && Bid<MA3 && MA1>MA3 && MA2>MA3 && OsMA<0 && Trade){ if (OrderSend(Symbol(,OP_SELL,Lots,NormalizeDouble(Bid,Digits),Slippage,SL,TP, "Puria_1",Magic,0,Red) ==-1) TimeBar=0; else TimeBar=Time[0]; }
return(0);
在这些条件下,专家顾问开了一笔交易,比如说,在卖出时,在盈利时关闭,并立即在卖出时开了另一笔交易。如何在EA中规定,当收到信号时,只有一个交易应该打开,即一个信号-一个交易。
预先感谢你。
1个变体--要么检查交易条件,以便:指数2显示买入信号,指数1显示卖出信号,那么在指数为0的条形图开盘时,将打开一个卖出交易。
第二种方法是检查订单历史,比较信号和订单指数,如果它们相同,就不要再开任何订单。
TimeBar变量在哪里以及如何初始化?
虽然这对你的情况没有什么帮助。我看到条件中的贸易变量,所以用它来调整开口。
我已经挣扎了两天了,想不通。我需要找到过去n个柱子的最低价格,但不是从当前的柱子,而是从通过函数收到的柱子。该函数返回订单被打开的条形图的索引。这是我们需要通过历史上的n个条形来寻找最低价格的条形。下面是我的代码,它有什么问题吗?
像这样
类似这样的事情。
非常感谢您!也试着用这个函数,但又是在一个循环中,结果是简单的))))再次感谢!
gyfto。
我有以下问题。如何拦截鼠标滚轮,有哪些winapi函数? 让我解释一下原因。在externs中有一个int参数。你需要旋转轮子来增加或减少它。
当你发现如何做到这一点时,请发布...
到目前为止,这只是它的工作方式。
正如Vadim告诉我不要使用MT4下的钩子,平台不喜欢它们,所以我不去碰它们。可能是白费功夫)