Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 945

 
Leo59 :

KAYNAK KODUna ihtiyacım var IMA teknik göstergesi, MetaTrader4 terminalinde "Göstergeler -> Trend -> Hareketli Ortalama" sekmesi aracılığıyla çağrılan bir gösterge

Şimdi daha net mi?

Neden tekerleği yeniden icat ettin?

OsMA kodunda veya herhangi bir diğerinde olduğu gibi yapın:

 //+------------------------------------------------------------------+
//| 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 );
  }
//+------------------------------------------------------------------+

Yoksa kategorik olarak Metaquotes'a güvenmiyor musunuz?

 

Merhaba. 943. sayfada, çalışmanın açıklaması ve * dll kitaplıklarının örnekleri hakkında bir komut dosyası yayınladım. Senaryonun neden çalışmadığını biraz anladım.

1. #include<WinUser32.mqh> bu durumda gerekli değildir.

2. Ayrı koşul if(lastkey != 0) Alert ("lastkey=",lastkey); basılan tuşun kodunu kararlı bir şekilde doğru şekilde verir. Geciktirirseniz, çalışacak soru kalmayacak.

3. Ayrı koşul if(lastmouse != 0) Alert("lastmouse=",lastmouse); fare hareket etmese bile sürekli olarak 512 çıktısı verir. Nadiren diğer numaraları kaydırın

fare tıklamalarına yanıt olarak.

4. if(lastwnd != 0) Alert("lastwnd=",lastwnd); büyük olasılıkla kitaplık unicode değil eski olduğu için boş bir dize döndürür.

Editörde *dll kütüphaneleri ile çalışabileceğinizi yardım kısmında okudum, fare ile editör penceresine sürüklemeniz yeterli. Açılmıyor.

Soru. Birisi para için "IdleLib.dll" dosyasını veya daha iyisini düzenlemeye yardımcı olmaya hazır. Bir yerde bu konu (ve diğer * dll) varsa bağlantıyı gösterin.

 
lütfen bana danışmana (belirli bir olaydan sonra) bir AutoTrading yasağını nasıl yazacağımı söyleyin, yani, AutoTrading terminalinin düğmesini programlı olarak bir yasak haline getirin. ACCOUNT_TRADE_ALLOWED sabitini çağırmaya ve değerini false olarak değiştirmeye çalıştım, ancak derleyici bunun hiçbir etkisinin olmayacağını yazıyor ( ACCOUNT_TRADE_ALLOWED == false; //ifadenin etkisi yok)
 
Bunu dene


 #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 :
lütfen bana danışmana (belirli bir olaydan sonra) bir AutoTrading yasağını nasıl yazacağımı söyleyin, yani, AutoTrading terminalinin düğmesini programlı olarak bir yasak haline getirin. ACCOUNT_TRADE_ALLOWED sabitini çağırmaya ve değerini false olarak değiştirmeye çalıştım, ancak derleyici bunun hiçbir etkisinin olmayacağını yazıyor ( ACCOUNT_TRADE_ALLOWED == false; //ifadenin etkisi yok)

Bu görev (EA'nın ticaret yapmasını yasaklama) semaforlarla (doğru/yanlış... ticarete izin ver/yasakla) çok kolay bir şekilde çözülür.

Yoksa "Otomatik ticaret" düğmesine basmak çok mu önemli?

 
charter :

Bu görev (danışmanın alım satım yapmasını yasakla) semaforlarla (doğru/yanlış... alım satıma izin ver/yasakla) çok kolay bir şekilde çözülür.

Yoksa "Otomatik ticaret" düğmesine basmak çok mu önemli?

Cevabınız için teşekkür ederim Eğer tüm terminal için Otomatik Ticareti devre dışı bırakmak mümkün değilse, elbette yapacağım. Gerçek şu ki, terminalimde birkaç Uzman Danışman çalışıyor ve ben

Hisse Senedi'ni ayrı bir danışmanla izlemek ve acil durumlarda tüm danışmanlar için aynı anda Otomatik alım satımı yasaklamak istedim, örneğin, Hisse Senedi %50 düştüğünde

 
amavladi :

Cevabınız için teşekkür ederim Eğer tüm terminal için Otomatik Ticareti devre dışı bırakmak mümkün değilse, elbette yapacağım. Gerçek şu ki, terminalimde birkaç Uzman Danışman çalışıyor ve ben

Hesap Karını ayrı bir danışmanla izlemek ve acil bir durumda, örneğin Hesap Karı %50 düştüğünde, tüm danışmanlar için aynı anda Otomatik alım satımı yasaklamak istedim.

Gerçekten kontrol etmedim. Çalışması için WinUser32.mqh dosyasını ekteki ile değiştirmeniz gerekir.

Şimdi test edildi ve çalışıyor. Ve işte birkaç güzellik daha

 #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 ; //Тестер стратегий |
}
}


Ve önceki gönderiyi WinUser32.mqh'yi değiştirmeden çalışacak şekilde düzelttim.

Dosyalar:
winuser32.mqh  71 kb
 

Herkese selamlar... Sorunun şu şekilde olduğunu biliyoruz. Kodu derlediğimde, d değişkeni 110 değerini alıyor ve gösterge her şeyi doğru gösteriyor, ancak yeni bir bar gelişiyle değişken 109 olur ve buna bağlı olarak tüm gösterge okumaları tamamen berbat olur. Ben zaten zaiPal'im..... Ne oluyor????

 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 );
  }

Derlerken neden bir değer değişkendir ve yeni bir çubuğun ortaya çıkmasıyla değişken değişir ?????

 
Eh..... benim durumumda olmayan profesyoneller bile güçlüdür????
 
Derleme ile yeni bir çubuğun gelişi arasındaki farkın ne olduğunu biri açıklayabilir mi ????