どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 945

 
Leo59:

MetaTrader4のターミナルで「Indicators -> Trends -> Moving Average」タブで呼び出されるIMAテクニカルインジケータのINITIAL CODE が必要なのですが、どうすればよいでしょうか?

明確になったのでしょうか?

なぜ車輪を再発明するのか?

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); は空の文字列を返します。おそらく、ライブラリが古く、ユニコードでないためだと思われます。

ヘルプには、エディタは*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...取引の許可/不許可)を使えば非常に簡単に解決できます。

それとも、"AutoTrading "ボタンを押すことがそんなに重要なのでしょうか?

端末全体のAutoTradingを 無効にできないのであれば、もちろんそうするつもりです。問題は、私のターミナルでいくつかのExpert Advisorを実行しているのですが、私は

別EAでEquityを監視し、Aquityが50%減少した時など緊急時に全EAのAutoTradingを同時に無効化したい。

 
amavladi:

端末全体のAutoTradingを 禁止できないのであれば、必ず そうします。私の端末では、いくつかのExpert Advisorが動作していることです。

別のEAで口座利益を監視し、口座利益が50%減少した場合など緊急時にはすべてのEAの自動売買を同時に無効にしたいと思った。

ちょっと確認していません。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);
  }

なぜコンパイル中は1つの値が変数になっているのに、新しいバーの到着で変数が変わるのか?

 
まあ......私の場合、プロでも強くない?
 
コンパイルと新しいバーの 到着の違いを説明できる人はいますか?