Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 945

 
Leo59:

Eu preciso do CÓDIGO INICIAL do indicador técnico IMA, o indicador que é chamado no terminal MetaTrader4 na aba "Indicadores -> Tendências -> Média Móvel".

Está mais claro agora?

Por que reinventar a roda?

Faça-o como OsMA ou qualquer outro código:

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

Ou você não confia categoricamente em Metaquotes?

 

Olá a todos. Eu coloquei um script na página 943 sobre a descrição do trabalho e exemplos de bibliotecas *dll. Eu descobri um pouco porque o roteiro não funciona.

1. #include<WinUser32.mqh> não é necessário neste caso.

2. Condição separadamente se(última tecla != 0) Alerta("última tecla=",última tecla); produz de forma estável e correta o código da tecla pressionada. Se você fizer um atraso, não há dúvidas sobre como funciona.

3. Condição separadamente se(lastmouse != 0) Alerta("lastmouse=",lastmouse); sai estável 512, mesmo que o mouse não se mova. É muito raro que outros números apareçam

Em resposta a um clique nos botões do mouse.

4. if(lastwnd != 0) Alert("lastwnd=",lastwnd); retorna uma cadeia vazia, muito provavelmente porque a biblioteca é antiga, não Unicode.

Para ajudar, leia que o editor pode trabalhar com bibliotecas *dll, basta arrastá-la e soltá-la na janela do editor. Não abre.

Pergunta. Alguém vai ajudar a corrigir a "IdleLib.dll" ou melhor, por dinheiro. Se em algum lugar houver este tópico(e outros *dll), mostre o link.

 
Favor aconselhar como proibir o AutoTrading no meu EA (após algum evento), ou seja, definir botão do terminalAutoTrading para proibir. Eu tentei chamar constante ACCOUNT_TRADE_ALLOWED e mudar seu valor para falso, mas o compilador diz que isso não terá efeito ( ACCOUNT_TRADE_ALLOWED == falso; //expressão não tem efeito)
 
Tente isto


#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:
Favor aconselhar como prescrever (após um determinado evento) uma proibição do AutoTrading em um EA, ou seja, definir programmaticamente o botão do terminalAutoTrading para proibir. Eu tentei chamar constante ACCOUNT_TRADE_ALLOWED e mudar seu valor para falso, mas o compilador diz que isso não terá efeito ( ACCOUNT_TRADE_ALLOWED == falso; //expressão não tem efeito)

Esta tarefa (proibir a EA de negociar) é muito facilmente resolvida com semáforos (verdadeiro/falso.... permitir/des permitir a negociação).

Ou é importante pressionar o botão "Auto Trade"?

 
charter:

Esta tarefa (proibir a EA de negociar) é muito facilmente resolvida com semáforos (verdadeiro/falso.... permitir/des permitir a negociação).

Ou é tão importante pressionar o botão "AutoTrading"?

Se eu não posso desativar oAutoTrading para todo o terminal, então, é claro que o farei. A questão é que eu tenho vários Conselheiros Especialistas correndo em meu terminal e eu

Quero usar um EA separado para monitorar a equidade e desativar o AutoTrading para todos os EAs simultaneamente em caso de emergência, por exemplo, quando a Aquity for reduzida em 50%.

 
amavladi:

Se eu não posso proibir oAutoTrading para todo o terminal, certamente o farei. O problema é que eu tenho vários Expert Advisors rodando no meu terminal e eu

Eu queria usar EA separada para monitorar o lucro da conta e desativar o AutoTrading para todos os EAs ao mesmo tempo em caso de emergência, por exemplo, quando o lucro da conta cair 50%.

Eu não verifiquei um pouco. Você tem que substituir WinUser32.mqh por um anexo para que funcione.

Verificado agora, ele funciona. E aqui estão mais alguns truques

#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 corrigi o post anterior para que funcionasse sem mudar WinUser32.mqh

Arquivos anexados:
winuser32.mqh  71 kb
 

Saudações a todos... Eu sei que o problema é o seguinte. Ao compilar o código, a variável d toma o valor 110 e o indicador mostra tudo corretamente, mas com a chegada de uma nova barra, a variável passa a ser 109 e, conseqüentemente, ela enrosca completamente todas as leituras do indicador. Eu já fiz merda..... Que porra é esta? 15

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

Por que durante a compilação um valor é variável, mas com a chegada de uma nova barra a variável muda?????

 
Bem..... no meu caso até mesmo profissionais sem forte????
 
Alguém pode explicar a diferença entre a compilação e a chegada de um novo bar????