Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 945

 
Leo59:

Ho bisogno del CODICE INIZIALE dell'indicatore tecnico IMA, l'indicatore che si chiama nel terminale MetaTrader4 nella scheda "Indicatori -> Tendenze -> Media Mobile".

È più chiaro ora?

Perché reinventare la ruota?

Fallo come OsMA o qualsiasi altro codice:

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

O non ti fidi categoricamente di Metaquotes?

 

Ciao a tutti. A pagina 943 ho postato uno script sulla descrizione del lavoro e degli esempi di librerie *dll. Ho capito un po' perché lo script non funziona.

1. #include<WinUser32.mqh> non è necessario in questo caso.

2. Condizione a parte if(lastkey != 0) Alert("lastkey=",lastkey); emette correttamente il codice del tasto premuto. Se si fa un ritardo, non ci sono dubbi su come funziona.

3. Condizione a parte if(lastmouse != 0) Alert("lastmouse=",lastmouse); emette stabilmente 512, anche se il mouse non si muove. È molto raro che saltino fuori altri numeri

In risposta al clic dei pulsanti del mouse.

4. if(lastwnd != 0) Alert("lastwnd=",lastwnd); restituisce una stringa vuota, molto probabilmente perché la libreria è vecchia, non Unicode.

Nella guida, leggete che l'editor può lavorare con librerie *dll, basta trascinarle nella finestra dell'editor. Non si apre.

Domanda. Qualcuno aiuterà a correggere "IdleLib.dll" o meglio per i soldi. Se da qualche parte c'è questo argomento (e altre *dll) mostra il link.

 
Siprega di consigliare come vietare l'AutoTrading nel mio EA (dopo qualche evento), cioè impostare il pulsante del terminaleAutoTrading per vietare. Ho provato a chiamare la costante ACCOUNT_TRADE_ALLOWED e cambiare il suo valore in false, ma il compilatore dice che questo non avrà effetto (ACCOUNT_TRADE_ALLOWED == false; //espressione non ha effetto)
 
Prova questo


#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:
Si prega di consigliare come prescrivere (dopo un certo evento) un divieto di AutoTrading in un EA, cioè impostare programmaticamente il pulsante del terminaleAutoTrading da vietare. Ho provato a chiamare la costante ACCOUNT_TRADE_ALLOWED e cambiare il suo valore in false, ma il compilatore dice che questo non avrà effetto (ACCOUNT_TRADE_ALLOWED == false; //espressione non ha effetto)

Questo compito (proibire all'EA di commerciare) si risolve molto facilmente con i semafori (vero/falso.... consentire/disconsentire il commercio).

O è importante premere il pulsante "Auto Trade"?

 
charter:

Questo compito (proibire all'EA di commerciare) si risolve molto facilmente con i semafori (vero/falso.... consentire/disconsentire il commercio).

O è così importante premere il pulsante "AutoTrading"?

Se non posso disabilitare l'AutoTrading per tutto il terminale, allora naturalmente lo farò. Il problema è che ho diversi Expert Advisors in esecuzione sul mio terminale e

Voglio usare un EA separato per monitorare l'Equity e disabilitare l'AutoTrading per tutti gli EA simultaneamente in caso di emergenza, per esempio, quando Aquity è ridotto del 50%

 
amavladi:

Se non posso vietare l'AutoTrading per tutto il terminale, lo farò sicuramente. Il fatto è che ho diversi Expert Advisors in esecuzione sul mio terminale e

Volevo usare un EA per monitorare il Profitto del conto e disabilitare l'AutoTrading per tutti gli EA allo stesso tempo in caso di emergenza, per esempio, quando il Profitto del conto scende del 50%

Non l'ho controllato un po'. Perché funzioni dobbiamo sostituire WinUser32.mqh con l'allegato.

Controllato ora, funziona. Ed ecco altri espedienti

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


E ho corretto il post precedente in modo che funzioni senza sostituire WinUser32.mqh

File:
winuser32.mqh  71 kb
 

Saluti a tutti... So che il problema è il seguente. Quando compilo il codice, la variabile d prende il valore 110 e l'indicatore mostra tutto correttamente, ma con l'arrivo di una nuova barra, la variabile diventa 109 e, di conseguenza, incasina completamente tutte le letture dell'indicatore. Ho già fatto una cazzata..... Che cazzo????

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

Perché durante la compilazione un valore è variabile, ma con l'arrivo di una nuova barra la variabile cambia?????

 
Bene..... nel mio caso anche i professionisti senza forte????
 
Qualcuno può spiegare la differenza tra la compilazione e l'arrivo di un nuovo bar????
Motivazione: