Perguntas de Iniciantes MQL4 MT4 MetaTrader 4 - página 173

 

Encontro muito mais expressão e negatividade nesta comunidade a cada dia, e ninguém reage.

De qualquer forma, esse é o fim da questão.

 
Nikolai Semko :

Se você quiser criar seu próprio teclado e controles de teclado (CHART_MOUSE_SCROLL, CHART_KEYBOARD_CONTROL ...), você precisa desativá-lo.
Mas isso não é possível.
A velocidade de Mas tal interface da BE é significativamente maior do que a da base, já que TI não é Possível usar funções assíncronas O próprio gráfico INIBIDOGetInteger

Muito obrigado mais uma vez, Nikolai. Tentei converter seu CanvasBar.mq5 para mt4, acrescentei algumas opções de entrada em relação a larguras/cores / ... (para que possa ser usado, por exemplo, "para simular o estilo ninjatrader candlestick")

Arquivos anexados:
CanvasBar.png  7 kb
CanvasBar.mq4  12 kb
 

Olá! eu tenho um indicador iEnvelopes padrão!
Não consigo fazer com que funcione da maneira que eu preciso!
Ie, a necessidade de quando a vela tocou ou cruzou a linha da vela atual para cima, depois abriu BUY, e a vela tocou ou cruzou a linha da vela atual para baixo, depois abriu SELL..... e aconteceu uma vez (o sinal acertado e tudo, outro sinal acertado e tudo constantemente)!

Inv_0_1 = iEnvelopes(_Symbol, time2_method, envel, envel_method, envelshag, envel_Price, envelproc, MODE_UPPER, 0); 
    Inv_0_11 = iEnvelopes(_Symbol, time2_method, envel, envel_method, envelshag, envel_Price, envelproc, MODE_UPPER, 1); 
     
    Inv_0_2 = iEnvelopes(_Symbol, time2_method, envel, envel_method, envelshag, envel_Price, envelproc, MODE_LOWER, 0); 
    Inv_0_21 = iEnvelopes(_Symbol, time2_method, envel, envel_method, envelshag, envel_Price, envelproc, MODE_LOWER, 1); 

    if(High[0] > Inv_0_2 && High[0] < Inv_0_21) 
      { 
      TP = NormalizeDouble(Bid - tpt * _Point, _Digits); 
         ticketZK = OpenOrder(_Symbol, OP_SELL, lot, Bid, slippage, 0, TP, comment, Magic, 0, clrRed); 
         if(ticketZK > 0) 
         Print("Ордер на SELL успешно открыт! "); 
         return; 
      }  
     
       
    if(Low[0] < Inv_0_1 && Low[0] > Inv_0_11) 
      { 
      TP = NormalizeDouble(Ask + tpt * _Point, _Digits); 
         ticketZK = OpenOrder(_Symbol, OP_BUY, lot, Ask, slippage, 0, TP, comment, Magic, 0, clrBlue); 
         if(ticketZK > 0) 
         Print("Ордер на BUY успешно открыт! "); 
         return; 
      }

Por favor, ajude!

 
ponochka:

Olá! Existe um indicador padrão iEnvelopes!
Não posso fazer com que funcione como eu quero!
Ie, a necessidade de quando a vela tocou ou cruzou a linha da vela atual para cima, depois abriu BUY, e a vela tocou ou cruzou a linha da vela atual para baixo, depois abriu SELL..... e aconteceu uma vez (o sinal acertado e tudo, outro sinal acertado e tudo constantemente)!

Por favor, ajude!

Preciso acrescentar a compreensão do processo ao código :-)

Enquanto a vela não fechar, Alto[0] só pode subir, Baixo[0] só pode descer, e os envelopes descompilados fazem o que querem :-)

Se o envelope não for retirado de Preços Abertos, não se pode olhar para uma barra não fechada.

 
Maxim Kuznetsov:

você precisa acrescentar compreensão do processo ao código :-)

Até que a vela feche, Alta[0] só pode subir, Baixa[0] só pode descer, enquanto os envelopes da descompilação se comportam como eles querem :-)

Se o envelope não for retirado de Preços Abertos, não é possível olhar para a barra não fechada.

Isto é, é melhor trabalhar com Aberto e Fechado? O que é o cheque?
 

Ajude-me a entender como calcular MA em uma matriz.

Eu construo MA por open-close, mas a partir do gráfico parece que ele é calculado da direita para a esquerda.

Eu useiiMAOnArray eSimpleMAOnBuffer como ferramentas, existe uma opção melhor?


//+------------------------------------------------------------------+
//|                                                        _null.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_separate_window
#include <MovingAverages.mqh>

#property indicator_buffers 4
#property indicator_plots   2
//--- plot OC
#property indicator_label1  "OC"
#property indicator_type1   DRAW_COLOR_HISTOGRAM
#property indicator_color1  clrSteelBlue, clrRed,clrGreen
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1

#property indicator_label2  "MA1"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrBrown
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1


//--- indicator buffers
double   OC[], OC_color[], MA1_buf[];
input int MA1=2;

int OnInit()
  {
  
   IndicatorSetString(INDICATOR_SHORTNAME,"t1");
   
   SetIndexBuffer(0,OC,INDICATOR_DATA);
   SetIndexBuffer(1,OC_color,INDICATOR_COLOR_INDEX);
   
   SetIndexBuffer(2, MA1_buf,INDICATOR_DATA); 
   //PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,50);

     
//--- indicator buffers mapping

   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
{

//--- Проверка количества доступных баров (1 - минимально, 4 - оптимально для большинства расчётов. Но всё "по месту"...)
   if(rates_total<4) return 0;
//--- Проверка и расчёт количества просчитываемых баров
   int limit=rates_total-prev_calculated; // 0 - пришел новый тик, новый бар формироваться не начал. 1 - пришел новый тик и начал формироваться новый бар.
   //if(limit>1) 
   
               // если вписать "limit>0", то на нулевом баре будет расчёт только нулевого бара, на каждом новом баре будет полный перерасчёт всей истории
               // если вписать "limit>1", то на нулевом баре будет расчёт только нулевого бара, на открытии нового бара - пересчёт первого и нулевого,
               // при подгрузке истории и на первом запуске - перерасчёт всей истории
     {
     limit=rates_total-1;
           // здесь должна быть инициализация всех используемых буферов индикатора необходимыми значениями (обычно EMPTY_VALUE и 0)
     }
   for(int i=limit; i>=0 && !IsStopped(); i--)
     {
      // необходимые действия по расчёту индикатора
     
     OC[i]=fmax(open[i],close[i])-fmin(open[i],close[i]);
     if(OC[i]>0.001)
      {   OC_color[i]=1;
      }
      }  
   
 /*  for(int k=limit; k>=0 && !IsStopped(); k--)
     {
   
     MA1_buf[k]=iMAOnArray(OC,0,MA1,k,MODE_SMA,0);
     }
*/
      SimpleMAOnBuffer(rates_total,prev_calculated,0,MA1,OC,MA1_buf);

//--- return value of prev_calculated for next call
   return(rates_total);
  }
 

Olá!!! Eu uso este código para traduzir um link em um comentário, mas sistematicamente uma vez por dia ele me dá um erro: web error 5203 (ERR_WEBREQUEST_REQUEST_FAILED. Erro no resultado da solicitação HTTP)

Existe alguma maneira de consertá-la?

string Web(string url)
{
string headers, ret;
char post[], result[];
int res, timeout=5000;
res= WebRequest("GET",url,NULL,timeout,post,result,head ers);
if(d3 != 1 && res < 0)
{
MessageBox("4060 Добавите ссылку в доверенную зону (Сервис-Настройки-Советники-Разрешить URL)", "Внимание", MB_OK);
Print("Web-Error: ",GetLastError()," (4060 Добавите ссылку в доверенную зону (Сервис-Настройки-Советники-Разрешить URL");
ExpertRemove();
d3 = 1;
return("");
}
ret = CharArrayToString(result, 0, -1);
return(ret);
}
 

Você pode me dizer como fazer coeficientes de ponderação para sinais?

Por exemplo, tenho três sinais por escala: crossover, comparação1 (barra anterior vs. barra anterior) e comparação 2 (barra anterior vs. barra anterior em uma TF mais alta).

Tento fazê-lo com MAKD construído em MT, mas ele não abre negócios. Não há nada no diário de bordo. Ou seja, a base padrão da EA não foi tocada, apenas a lógica de abertura de posição foi alterada. Portanto, o trigêmeo é a base do MT MAKD-advisor (normal)

Só não jure por código núbio, eu não sou um programador.


...
Вводимые параметры

input double TradeLevel_BUY = 1;

input double TradeLevel_SELL = -1;


input double w_S_MA_1 = 1;

input double w_S_MA_2 = 1;

input double w_S_MA_3 = 1;

input double w_S_MA_4 = 1;

input double w_S_MA_5 = 1;

input double w_S_MA_6 = 1;


...

----------------

...

void OnTick(void)

  {

   

   double MA_Fast_1,

          MA_Fast_2,

          MA_Slow_1,

          MA_Slow_2,

          MA_Fast_LargeTF_1,

          MA_Fast_LargeTF_2,

          MA_Slow_LargeTF_1,

          MA_Slow_LargeTF_2;

double S_MA_1,

       S_MA_2,

       S_MA_3,

...

   MA_Fast_1=iMA(NULL,0,MA_Fast_1_Period,MA_Fast_1_Shift,MODE_EMA,PRICE_CLOSE,1);
   MA_Fast_2=iMA(NULL,0,MA_Fast_2_Period,MA_Fast_2_Shift,MODE_EMA,PRICE_CLOSE,2);
   MA_Fast_LargeTF_1=iMA(NULL,MA_LargeTF,MA_Fast_LargeTF_1_Period,MA_Fast_LargeTF_1_Shift,MODE_EMA,PRICE_CLOSE,1);
   MA_Fast_LargeTF_2=iMA(NULL,MA_LargeTF,MA_Fast_LargeTF_2_Period,MA_Fast_LargeTF_2_Shift,MODE_EMA,PRICE_CLOSE,2);
   MA_Slow_1=iMA(NULL,0,MA_Slow_1_Period,MA_Slow_1_Shift,MODE_EMA,PRICE_CLOSE,1);
   MA_Slow_2=iMA(NULL,0,MA_Slow_2_Period,MA_Slow_2_Shift,MODE_EMA,PRICE_CLOSE,2);
   MA_Slow_LargeTF_1=iMA(NULL,0,MA_Slow_LargeTF_1_Period,MA_Slow_LargeTF_1_Shift,MODE_EMA,PRICE_CLOSE,1);

   MA_Slow_LargeTF_2=iMA(NULL,0,MA_Slow_LargeTF_2_Period,MA_Slow_LargeTF_2_Shift,MODE_EMA,PRICE_CLOSE,2);

...

 double Sum;

if (MA_Fast_1>MA_Slow_1)

      {

        S_MA_1=1*w_S_MA_1;

      }

   else

      {

        S_MA_1=0;

      }

   return;

   

   if (MA_Fast_1>MA_Fast_2)

      {

        S_MA_2=1*w_S_MA_2;

      }

   else

      {

        S_MA_2=0;

      }

   return;

   

   if (Open[1]<MA_Fast_LargeTF_1 && Close[1]>MA_Fast_LargeTF_1 || Open[1]>MA_Fast_LargeTF_1 && Close[1]>MA_Fast_LargeTF_1)

      {

        S_MA_3=1*w_S_MA_3;

      }

   else

      {

        S_MA_3=0;

      }

   return;

...

 if (MA_Fast_1<MA_Slow_1)

      {

        S_MA_4=-1*w_S_MA_4;

      }

   else

      {

        S_MA_4=0;

      }

   return;

   

   if (MA_Fast_1<MA_Fast_2)

      {

        S_MA_5=-1*w_S_MA_5;

      }

   else

      {

        S_MA_5=0;

      }

   return;

   

   if (Open[1]>MA_Fast_LargeTF_1 && Close[1]<MA_Fast_LargeTF_1 || Open[1]<MA_Fast_LargeTF_1 && Close[1]<MA_Fast_LargeTF_1)

      {

        S_MA_6=-1*w_S_MA_6;

      }

   else

      {

        S_MA_6=0;

      }

   return;


   Sum=S_MA_1+S_MA_2+S_MA_3+S_MA_4+S_MA_5+S_MA_6;

...

 if(Sum>TradeLevel_BUY)

        {

         ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Ask-SL*Point,Bid+TP*Point,"Optim",16384,0,Blue);

...


 if(Sum<=TradeLevel_SELL)

        {

         ticket=OrderSend(Symbol(),OP_SELL,Lot,Bid,3,Bid+SL*Point,Ask-TP*Point,"Optim",16384,0,Red);

         if(ticket>0)

 

Boa tarde! Como implementar corretamente esta função (acho que você vai entender o que eu quero fazer)?

         if(IsTesting())
            for(int i2=0; i2<fixweekBars; i2++)
               else
            for(int i2=fixweekBars; i2>0; i2--)
 

Hi. Precisa de ajuda com winApi user32.dll.

Há uma tabela no perfil. Preciso de um roteiro para abrir mais dois Chatr's. Todos os três gráficos (era um e abriram mais dois) para fazer o tamanho especificado no conjunto.

Não importa como eu tente - tudo sem sorte.

Este roteiro muda o tamanho e a posição do gráfico no qual eu lanço.

//+------------------------------------------------------------------+
//|                                                      posicion.mq4 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property script_show_inputs

#import "user32.dll"

int  SetWindowPos(int hWnd,int hWndInsertAfter,int X,int Y,int cx,int cy,int uFlags);
int  GetParent(int hWnd);
int  GetTopWindow(int hWnd);
int  GetWindow(int hWnd,int wCmd);
int  GetWindowDC(int h);
int  ShowWindow(int hWnd,int nCmdShow);
#import 

#define GW_HWNDNEXT        0x0002
#define SWP_NOSIZE         0x0001
#define SWP_NOMOVE         0x0002
#define SWP_NOZORDER       0x0004
#define SW_RESTORE 9
#define SWP_FRAMECHANGED   0x0020

int     gr2x1_P1  []    = {PERIOD_H4,PERIOD_D1,PERIOD_W1};        // Period of grafic 1 of 2x1
int     CXShift2x1[]    = {0,0,1040};             // Horizontal shift of grafic 1 of 2x1
int     CYShift2x1[]    = {0,268,0};           // Vertical shift of grafic 1 of 2x1
int     CXSize2x1 []    = {1040,1040,880};           // Width of grafic 1 of 2x1
int     CYSize2x1 []    = {500,500,1000};           // Height of grafic 1 of 2x1

input int xy = 0;//xy 0-2
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
   void OnStart()
  {

   int i,handle;
   int parent;

   handle=(int)ChartGetInteger(0,CHART_WINDOW_HANDLE);Print("ChartGetInteger(0,CHART_WINDOW_HANDLE)   ",handle); //возвращает дескриптор 2688738                                                                                                                   
   parent=GetParent(handle);Print("parent_0   ",parent);                                         //возвращает дескриптор 197188
   ShowWindow(parent,SW_RESTORE);

  
      i=xy;
      SetWindowPos(parent,0,CXShift2x1[i],CYShift2x1[i],CXSize2x1[i],CYSize2x1[i],0);
      //Sleep(5000);
  }
//+------------------------------------------------------------------+
Открыть Новые дополнительные Chart-ы 
Но как дальше изменить размер дополнительных Chart-ов, ни как не получается. 

int i;
   for(i=0; i<3; i++)
     {
     long h=ChartOpen("EURUSD",gr2x1_P1[i]);
     }