任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 945

 
Leo59:

我需要IMA技术指标的INITIAL CODE ,该指标在MetaTrader4终端的 "指标->趋势->移动平均线 "标签下被调用。

现在更清楚了吗?

为什么要重新发明车轮?

让它像OsMA或任何其他代码一样。

//+------------------------------------------------------------------+
//| Moving Average of Oscillator                                     |
//+------------------------------------------------------------------+
int OnCalculate (const int rates_total,
                 const int prev_calculated,
                 const datetime& time[],
                 const double& open[],
                 const double& high[],
                 const double& low[],
                 const double& close[],
                 const long& tick_volume[],
                 const long& volume[],
                 const int& spread[])
  {
   int i,limit;
//---
   if(rates_total<=InpSignalSMA || !ExtParameters)
      return(0);
//--- last counted bar will be recounted
   limit=rates_total-prev_calculated;
   if(prev_calculated>0)
      limit++;
//--- macd counted in the 1-st buffer
   for(i=0; i<limit; i++)
      ExtMacdBuffer[i]=iMA(NULL,0,InpFastEMA,0,MODE_EMA,PRICE_CLOSE,i)-
                    iMA(NULL,0,InpSlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
//--- signal line counted in the 2-nd buffer
   SimpleMAOnBuffer(rates_total,prev_calculated,0,InpSignalSMA,ExtMacdBuffer,ExtSignalBuffer);
//--- main loop
   for(i=0; i<limit; i++)
      ExtOsmaBuffer[i]=ExtMacdBuffer[i]-ExtSignalBuffer[i];
//--- done
   return(0);
  }
//+------------------------------------------------------------------+

还是你断然不相信Metaquotes?

 

大家好。我在第943页发布了一个关于*dll库的工作描述和例子的脚本。我想明白了一点,为什么这个脚本不工作了。

1.在这种情况下不需要#include<WinUser32.mqh>。

2.条件分别为 if(lastkey != 0)Alert("lastkey=",lastkey); 稳定地正确输出所按按键的代码。如果你做一个延迟,它是如何工作的,这是毫无疑问的。

3.条件分别为 if(lastmouse != 0) Alert("lastmouse=",lastmouse); 稳定地输出512,即使鼠标没有移动。冒出其他数字的情况非常罕见

作为对点击鼠标按钮的回应。

4. if(lastwnd != 0) Alert("lastwnd=",lastwnd); 返回一个空字符串,很可能是因为库是旧的,不是Unicode。

在帮助中看到,编辑器可以使用*dll库,只需将其拖放到编辑器窗口中。它打不开。

问题。谁能帮助纠正 "IdleLib.dll "或更好的钱。如果某个地方有这个主题(和其他*dll),请显示链接。

 
请告知如何在我的EA中禁止自动交易(在某些事件之后),即把终端自动交易的按钮设置为禁止我试图调用常量ACCOUNT_TRADE_ALLOWED,并将其值改为false,但编译器说这不会有任何效果(ACCOUNT_TRADE_ALLOWED == false; //表达式没有效果)。
 
试试这个


#import "user32.dll"
int GetForegroundWindow();
int  PostMessageW(int  hWnd, int  Msg, int  wParam, string lParam);
#import
#define  WM_COMMAND                    0x0111

после определенного события PostMessageW(GetForegroundWindow(), WM_COMMAND, 33020, (string) 0);
 
amavladi:
请告知如何在EA中规定(在某一事件后)禁止自动交易,即通过程序设置终端自动交易 的按钮来禁止自动 交易。我试图调用常量ACCOUNT_TRADE_ALLOWED,并将其值改为false,但编译器说这不会有任何效果(ACCOUNT_TRADE_ALLOWED == false; //表达式没有效果)。

这个任务(禁止EA交易)很容易用信号(true/false.... 允许/不允许交易)来解决。

还是按 "自动交易 "按钮很重要?

 
charter:

这个任务(禁止EA交易)很容易用信号(true/false.... 允许/不允许交易)来解决。

还是按 "自动交易 "按钮有那么重要?

如果我不能禁用整个终端的自动交易,那么我当然会这样做问题是,我有几个专家顾问在我的终端上运行,而我

我想用一个单独的EA来监控Equity,并在紧急情况下同时关闭所有EA的自动交易功能,例如,当Aquity减少50%时。

 
amavladi:

如果我不能禁止整个终端的自动交易,我一定会这样做问题是,我有几个专家顾问在我的终端上运行,而我

我想用一个EA来监控账户利润,并在紧急情况下同时关闭所有EA的自动交易功能,例如,当账户利润下降50%时。

我还没有检查过它。你必须用附件中的WinUser32.mqh替换,才能使其发挥作用。

现在检查了一下,可以使用。下面是一些更多的噱头

#include <WinUser32.mqh>

void OnTick()
{
 после определенного события wCommands(20); 
}

void wCommands(int com)
{
switch(com)
{
case  1:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33137, (string)0); return; //M1 |
case  2:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33138, (string)0); return; //M5 |
case  3:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33139, (string)0); return; //M15 |
case  4:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33140, (string)0); return; //M30 |
case  5:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33135, (string)0); return; //H1 |
case  6:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33136, (string)0); return; //H4 |
case  7:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33134, (string)0); return; //D1 |
case  8:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33141, (string)0); return; //W1 |
case  9:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33334, (string)0); return; //MN |
case 10:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33050, (string)0); return; //Удалить эксперт |
case 11:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 35426, (string)0); return; //Удалить скрипт |
case 12:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 57602, (string)0); return; //Закрыть окно текушего графика |
                                                                           57604              //Сохранить как
                                                                           57607              //Вызов диспетчера печати
                                                                           57608              //Печать графика
                                                                           57609              //Предварительный просмотр
case 13:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33048, (string)0); return; //Вызов свойств экстерта |
case 14:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33157, (string)0); return; //Вызов свойств графика |
case 15:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33025, (string)0); return; //Увеличение масштаба |
case 16:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33026, (string)0); return; //Уменьшение масштаба |
case 17:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33018, (string)0); return; //Переключение на бары |
case 18:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33019, (string)0); return; //Переключение на свечи |
case 19:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33022, (string)0); return; //Переключение на линию |

case 20:        PostMessageA(GetForegroundWindow(), WM_COMMAND, 33020, (string)0); return; //Переключение кнопки советника |
case 21:        PostMessageA(GetForegroundWindow(), WM_COMMAND, 35429, (string)0); return; //Окно логина и пароля |
case 22:        PostMessageA(GetForegroundWindow(), WM_COMMAND, 37400, (string)0); return; //Пересканировать сервера |
case 23:        PostMessageA(GetForegroundWindow(), WM_COMMAND, 35403, (string)0); return; //Глобальные переменные |
case 24:        PostMessageA(GetForegroundWindow(), WM_COMMAND, 35419, (string)0); return; //Список индикаторов |
case 25:        PostMessageA(GetForegroundWindow(), WM_COMMAND, 33265, (string)0); return; //Открывает окно настройки |
case 26:        PostMessageA(GetForegroundWindow(), WM_COMMAND, 33262, (string)0); return; //Архив катировак |
case 27:        PostMessageA(GetForegroundWindow(), WM_COMMAND, 33309, (string)0); return; //Обзор рынка |
case 28:        PostMessageA(GetForegroundWindow(), WM_COMMAND, 33310, (string)0); return; //Навигатор |
case 29:        PostMessageA(GetForegroundWindow(), WM_COMMAND, 33314, (string)0); return; //Терминал |
case 30:        PostMessageA(GetForegroundWindow(), WM_COMMAND, 33315, (string)0); return; //Тестер стратегий |
}
}


我纠正了以前的帖子,以便在不替换WinUser32.mqh的情况下工作。

附加的文件:
winuser32.mqh  71 kb
 

向大家问好...我知道问题是这样的。当我编译代码时,变量d的值为110,指标显示一切正常,但随着新条形 的到来,变量变成109,因此,它完全搞砸了所有的指标读数。我已经搞砸了.....什么他妈的????

int start()
  {
  int limit,Val,Oi;
  
   drawonce();
//limit=Bars;
if (b!=Bars){
b=Bars;
datetime ldt_BeginDay = iTime (NULL, PERIOD_D1,Q); 
int li_Bar = iBarShift (NULL, 0, ldt_BeginDay);
d=0;

 for(int i=li_Bar-10; i>=0; i--){  
 
 
if (curDay!=TimeDay(Time[i])) {

curDay=TimeDay(Time[i]);
OOO=iClose(NULL,PERIOD_D1,Q-d+1)-iOpen(NULL,PERIOD_D1,Q-d+1);
if (volarr[Q-d]!=0) Val=volarr[Q-d]-volarr[Q-d+1];
if (oiarr[Q-d]!=0)  Oi=oiarr[Q-d]-oiarr[Q-d+1];
d++;
}
Buffer1[i]=Val;
Buffer2[i]=Oi;
Buffer3[i]=OOO;

}   
   
   
}
   
   WindowRedraw();
   Comment(Q,"   ",d);
   return(0);
  }

为什么在编译过程中,一个值是可变的,但随着一个新条形的到来,这个变量会改变?????

 
那么.....,在我的案例中,即使是没有强大的专业人员????。
 
有谁能解释一下编译和新bar???? 的区别?