[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 239

 
dmmikl86 >> :

Prezados usuários do fórum!

Eu escrevi um indicador e o problema é que não consigo desenhar a média móvel (Buf_2), aqui está o código:

Ajudar-me a entender qual é o problema?

E por que seria desenhado se você não entrar no laço depois de // média e i<0 senão você não sairá do laço anterior

 i++; // поставьте здесь увеличение на один и всё заработает или присвойте i=0; напрямую ноль
//====================================================================
// average
int n=0;
   while( i>=0) 
      {  
       //----
       while( n<= average){
         Buf_2[ i]= Buf_1[ i- n];
         n++;
         }
       
       i--;
       //----
      }

//----
   return(0);
  }
//+------------------------------------------------------------------+
 

Boa tarde)


Desculpe a intrusão, já fiz esta pergunta, mas não obtenha a resposta( De qualquer forma, durante a semana, nada avançou


Você pode me dizer como escrever uma função colocando um pedido pendente?


O que devo colocar em vez de Licitações ou Pedidos? Preciso de uma ordem pendente no Alto de um dos castiçais. Eu recebo este valor e como devo inseri-lo na função? Este preço pode não estar no fluxo comercial. Gostaria de saber se você poderia colocar o código para colocar um pedido pendente e, mais importante ainda, de onde obter seu preço de ajuste!

 

Por exemplo (exemplo de estabelecer uma parada de compra) :

(não é de forma alguma necessário que o preço estabelecido esteja no fluxo de cotação a fim de estabelecer uma ordem pendente.

você pode dançar com o preço atual ou tomar qualquer preço, desde que você adira ao nível de parada de PREÇO ATUAL até o PREÇO STOP)

( "EURUSD - Tendências, Previsões e Conseqüências" )

extern int      Magic = 77777;
extern int      StopLoss=400;
extern int      TakeProfit=120;
extern double   Lots=0.1;

static int prevtime = 0;
//-- Подключаемые модули --
#include <stderror.mqh>
#include <stdlib.mqh>


//=======================================================
int start()
{
if(Time[0] == prevtime)   return(0);//ждём появления нового бара
   prevtime = Time[0];//если появился новый бар , включаемся
   

//-----------------------------------------------------------------------
if ( NumberOfOrders(NULL,OP_BUYSTOP, Magic)<1 )  {//если нет открытых бай- поз.
if   ( NumberOfPositions(NULL,OP_BUY, Magic)<1)  {//если нет ордеров байстоп
double priceBUY=iHigh(NULL,0,iHighest(NULL,0,MODE_HIGH,50,0));//-задаем цену
// установки  ордера по максимуму из посл. 50-ти свечей
double SL=0;double TP=0;//выставляем стопы
if( StopLoss>0)   SL= priceBUY-Point* StopLoss;
if( TakeProfit>0) TP= priceBUY+Point* TakeProfit;  
//ставим ордер 
ticket=OrderSend(Symbol(),OP_BUYSTOP, Lots, price,5, SL, TP,"байстоп", Magic,0,Blue);
if( ticket < 0) { Print("Ошибка открытия ордера BUY #", GetLastError()); 
               Sleep(10000);   return (0); }
}}
//--------------------------------------------------------------------------

Аналогично ставится селл-стоп


//----------------------------------------------------------------------------
return (0);
 //-----------------Конец функции int start()----
}//int start()

//--------ставим пользовательские функции -------------

Em vez de

preço duploBUY=..... ....

introduza sua fórmula

 

Estou escrevendo um indicador, cuja essência é a seguinte: se uma vela está em alta, a linha do indicador está para cima, para baixo. bem, o volume é adicionado a tudo isso (para que cada vela tenha um peso volumétrico). E a segunda linha é uma média móvel da linha atual

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red

extern int average=14;
//---- buffers
double Buf_1[], Buf_2[];
double sum_b;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0, Buf_1);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1, Buf_2);
   
   sum_b=0.0;
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    i, 
          Counted_bars=IndicatorCounted();

int n=0;
//----
//====================================================================
// график тела с объемом

i=Bars- Counted_bars-1;           // Индекс первого непосчитанного
   while( i>=0) 
      {  
       //----
       if (Close[ i]>Open[ i]) {
         sum_b = sum_b + (Close[ i]-Open[ i])*Volume[ i];
         Buf_1[ i]= sum_b;
         }
         
       if (Close[ i]<Open[ i]) {
         sum_b = sum_b - (Open[ i]-Close[ i])*Volume[ i];
         Buf_1[ i]= sum_b;
         }
         
       if (NormalizeDouble(Close[ i],Digits)==NormalizeDouble(Open[ i],Digits)) {
         Buf_1[ i] = Buf_1[ i-1];
         }
       
       // average  
       while( n<= average){
         Buf_2[ i]= Buf_1[ i- n];
         n++;
         }

       i--;
       //----
      }
//====================================================================


//----
   return(0);
  }
//+------------------------------------------------------------------+
problemas: a linha principal desenha os picos quando um doji é formado, e a média móvel não é desenhada?
 
dmmikl86 >> :

Estou escrevendo um indicador, cuja essência é a seguinte: se uma vela está em alta, a linha do indicador está para cima, para baixo. bem, o volume é adicionado a tudo isso (para que cada vela tenha um peso volumétrico). E a segunda linha é a média móvel da linha atual

problemas: a linha principal desenha os picos durante a formação doji e a média móvel não é desenhada?


O bloco de ifs pode ser substituído por um mais eficiente

if (Close[ i]>Open[ i]) {
         sum_b = sum_b + (Close[ i]-Open[ i])*Volume[ i];
         Buf_1[ i]= sum_b;
}
else if (Close[ i]<Open[ i]) {
         sum_b = sum_b - (Open[ i]-Close[ i])*Volume[ i];
         Buf_1[ i]= sum_b;
}
else {  //       if (NormalizeDouble(Close[i],Digits)==NormalizeDouble(Open[i],Digits)) {
         Buf_1[ i] = Buf_1[ i + 1];
}

[i + 1] - uma vez que as matrizes de índice são numeradas da direita para a esquerda. Agora os candelabros com zero corpos serão processados corretamente.

Com a linha do meio buf_2 do código não está clarode todo o que o autor queria.


 
OneDepo >> :

O bloco de valor if pode ser substituído por um bloco mais eficiente

[i + 1] - porque as arrays de índice são numeradas da direita para a esquerda. Agora os candelabros com corpo zero serão processados corretamente.

Com a linha do meio buf_2 do código não está clarode todo o que o autor queria.


queria que fosse uma média móvel com um período de 14, com base no valor do indicador

 
dmmikl86 >> :

queria que fosse uma média móvel com um período de 14, traçada contra o valor do indicador

Então, é assim:

//+------------------------------------------------------------------+
//|                                                     dmmikl86.mq4 |
//|                      Copyright © 2007, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red

extern int BarsCount = 1000;
extern int average=14;

//---- buffers
double Buf_1[], Buf_2[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
    if ( average < 1)
        average = 1;

    //---- indicators
    SetIndexStyle(0,DRAW_LINE);
    SetIndexBuffer(0, Buf_1);
    SetIndexStyle(1,DRAW_LINE);
    SetIndexBuffer(1, Buf_2);
    //----
    return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
    int i, n;

    //====================================================================
    // график тела с объемом
    double s, sum_b = 0;

    int limit = BarsCount;
    if ( limit > Bars)
        limit = Bars;

    for ( i = limit; 0 <= i; i--) {

        if (Close[ i]>Open[ i]) {
            sum_b += (Close[ i]-Open[ i])*Volume[ i];
            Buf_1[ i] = sum_b;
        }
        else if (Close[ i]<Open[ i]) {
            sum_b -= (Open[ i]-Close[ i])*Volume[ i];
            Buf_1[ i] = sum_b;
        }
        else {
            Buf_1[ i] = Buf_1[ i + 1];
        }

        // SMA calculation
        if ( i + average < limit) {
            s = 0;
            for ( n = 0; n < average; n++) {
                s += Buf_1[ i+ n];
            }
            Buf_2[ i] = s/ average;
        }

    }

    return(0);
  }
//+------------------------------------------------------------------+
 
como posso fazer uma troca uma vez por bar e não abrir mais pedidos neste bar se já existe uma troca neste bar?
 
Basta olhar para esta linha.
 
Vinin >> :
Basta olhar para esta linha.

Ou leia a tarefa 27 no livro didático de Kovalev. Há exemplos de códigos e uma explicação detalhada de como funciona.