[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 159

 
1Rakso >> :

1) E como você o torna desativado, através de variáveis externas?

2) Posso definir de tal forma que a primeira ordem aberta seja fechada ao abrir, e as ordens subsequentes 2, 3, etc. não sejam fechadas? Suponha que eu abra uma ordem de compra - esta é a primeira ordem, depois abro outra ordem de compra - a segunda, etc. e depois desta série de ordens somente a primeira ordem seria fechada por СorderClose ?

Confira as páginas de endereço em https://www.mql5.com/ru/forum/105913

1) Aproximadamente assim -

extern bool      AutoClose = True;
.......................................


//********* Закрытие позиций ****************************************
if ( AutoClose) {  
//----переменные для закрытия позиций ----
double Stochast_0 =iStochastic(NULL,0, Stochastic_period,3,3,MODE_SMA,0,MODE_MAIN,0);
double Stochast_1 =iStochastic(NULL,0, Stochastic_period,3,3,MODE_SMA,0,MODE_MAIN,1);
//----------------------------------------------------------------------
  for (int v=0; v<OrdersTotal(); v++)                             {       
      if (OrderSelect( v, SELECT_BY_POS, MODE_TRADES))               {           
        if (OrderSymbol()==Symbol()&& OrderMagicNumber()== MagicNum)   { 
//-----------------------------------------------------                  
if (OrderType() == OP_BUY) { 
      if( Stochast_1>75 && Stochast_0<75)     {
           OrderClose(OrderTicket(),OrderLots(),Bid,3,Green); // закрываем позицию
                // return(0); // выходим
                }       
     }  
 //--------------------------------------------------------
if (OrderType() == OP_SELL) { 
      if( Stochast_1<25 && Stochast_0>25)    {
                 OrderClose(OrderTicket(),OrderLots(),Ask,3,Green); // закрываем позицию
                // return(0); // выходим
                }       
     }  
 //-------------------------------------------------------                       
    }  // Symbol()  
  } // select
 } //total
} //Close_

2)

Remova a fechadura ( // ) antes de

// retornar(0); // sair

e então somente a primeira (ou última) posição seria fechada.

 
PyMbIH >> :

Olá, a todos ))))

Ajuda.

Comecei agora mesmo a programar o mql4.

Escrever um consultor especializado.

Como fazer isso.

Quero que meu consultor especializado trabalhe somente nas segundas-feiras.

//Открытие и закрытие  позиций только в понедельник  
      if (TimeDayOfWeek(TimeCurrent()) == 1)
         return (0);  
 
rid писал(а) >>

>> Obrigado!

 
Vinin >> :

Obrigado, Vinin =)

 
rid >> :

Veja através das "Posições de Encerramento". No sinal indicador".

1) Aproximadamente assim -

2)

Remova o bloqueio ( // ) antes de

// retornar(0); // sair

e então apenas as primeiras posições serão fechadas.

Obrigado, livre-se!

Você me ajudou muito, ainda há pessoas amáveis)

Tenho tudo, vou ler as contas, espero não ter ocupado muito do seu tempo)

 

Por favor, ajude.

Se durante o teste visual do EA 1.mq4 (anexo) eu colocar em um gráfico o indicador 3-cci-h3 (anexo), então, como parece, com exatamente os mesmos parâmetros dos sinais cci calculados do indicador e os cci reais (texto do objeto no canto superior direito) não coincidem.

POR QUÊ?

Por que é que os alertas não funcionam neste indicador?

Código de Conselheiro Especializado:

double lasthigh, lastlow, lasthigh2=200000, lastlow2=0, lastpos=0, t[2];

int start()
{Comment("");
lasthigh=High[1]; lastlow=Low[1];
if( lasthigh< lasthigh2) lasthigh2= lasthigh;
if( lastlow> lastlow2) lastlow2= lastlow;
t[0]= lasthigh2;
t[1]= lastlow2;  
string s1="lasthigh2 *** "+DoubleToStr( t[0],5);
string s2="lastlow2 *** "+DoubleToStr( t[1],5);
string str[2];
str[0]= s1;
str[1]= s2;
color col=Lime;
     for(int y=0; y<2; y++)
     {ObjectCreate("textSignal"+ y,OBJ_LABEL,0,0,0,0,0);    
      ObjectSet("textSignal"+ y, OBJPROP_CORNER,1);
      ObjectSet("textSignal"+ y, OBJPROP_XDISTANCE,35-25);
      ObjectSet("textSignal"+ y, OBJPROP_YDISTANCE, y*(20)+20+8);
      ObjectSetText("textSignal"+ y, str[ y],15,"Tahoma", col);
     }
  
  if( lastpos==0){if( lastlow2> lasthigh){
  Comment("PRODAGA!!!   PRODAGA!!!   PRODAGA!!!   PRODAGA!!!   PRODAGA!!!   PRODAGA!!!   PRODAGA!!!   PRODAGA!!!   PRODAGA!!!",
  "PRODAGA!!!   PRODAGA!!!   PRODAGA!!!   PRODAGA!!!   PRODAGA!!!   PRODAGA!!!   "); lasthigh2=2000000; lastlow2=0; lastpos=1;}}
  else {if( lasthigh2< lastlow){Comment("POKUPKA!!!   POKUPKA!!!   POKUPKA!!!   POKUPKA!!!   POKUPKA!!!   POKUPKA!!!   POKUPKA!!!",
  "   POKUPKA!!!   POKUPKA!!!   POKEPKA!!!   POKEPKA!!!   POKEPKA!!!"); lasthigh2=2000000; lastlow2=0; lastpos=0;}}

}


Código indicador:

//+------------------------------------------------------------------+
//|                                                     i-3CCI-h.mq4 |
//|                                               johnfantom & KimIV |
//|                                              http://www.kimiv.ru |
//|                                                                  |
//|  02.01.2006  CCI с 3-х ТФ в одном флаконе.                       |
//+------------------------------------------------------------------+
#property copyright "johnfantom & KimIV"
#property link      "http://www.kimiv.ru"

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 DodgerBlue
#property indicator_maximum 1.4
#property indicator_level1  0
#property indicator_minimum -1.2

//------- Внешние параметры индикатора -------------------------------
extern int CCI_Period_0 = 14;     // Период CCI для текущего ТФ
extern int Level_0      = 100;    // Уровень CCI для текущего ТФ
extern int TF_1         = 60;     // Количество минут первого ТФ
extern int CCI_Period_1 = 14;     // Период CCI для первого ТФ
extern int Level_1      = 100;    // Уровень CCI для первого ТФ
extern int TF_2         = 240;    // Количество минут второго ТФ
extern int CCI_Period_2 = 14;     // Период CCI для второго ТФ
extern int Level_2      = 100;    // Уровень CCI для второго ТФ
extern int NumberOfBars = 1000;  // Количество баров обсчёта (0-все)
extern int ExtBars=3; 
int per;


//------- Буферы индикатора ------------------------------------------
double buf0[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void init() {
  IndicatorDigits(1);

  SetIndexBuffer(0, buf0);
  SetIndexLabel (0, "i-3CCI-h");
  SetIndexStyle (0, DRAW_HISTOGRAM, STYLE_SOLID, 2);
  SetIndexEmptyValue(0, 0);
}

//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void deinit() {
  Comment("");
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
void start() {
  double cci0, cci1, cci2;
  int    nb1, nb2, count;
  int    LoopBegin, sh;


 	if ( NumberOfBars==0) LoopBegin=Bars-1;
  else LoopBegin= NumberOfBars-1;
  LoopBegin=MathMin(Bars-1, LoopBegin);
  count=IndicatorCounted();
  for ( sh= count; sh>=0; sh--) {
    nb1=iBarShift(NULL, TF_1, Time[ sh+1], False);
    nb2=iBarShift(NULL, TF_2, Time[ sh+1], False);

    cci0=iCCI(NULL, 0   , CCI_Period_0, PRICE_CLOSE, sh+1);
    cci1=iCCI(NULL, TF_1, CCI_Period_1, PRICE_CLOSE, nb1);
    cci2=iCCI(NULL, TF_2, CCI_Period_2, PRICE_CLOSE, nb2);
    
   /* double cci[3];
    cci[0]=cci0;
    cci[1]=cci1;
    cci[2]=cci2;
    string s1="cci-0 *** "+DoubleToStr(cci[0],3);
    string s2="cci-1 *** "+DoubleToStr(cci[1],3);
    string s3="cci-2 *** "+DoubleToStr(cci[2],3);
    string str[3];
    str[0]=s1;
    str[1]=s2;
    str[2]=s3;
    color col=Lime;
     for(int y=0;y<3;y++)
     {ObjectCreate("textSignal"+y,OBJ_LABEL,0,0,0,0,0);    
      ObjectSet("textSignal"+y,OBJPROP_CORNER,1);
      ObjectSet("textSignal"+y,OBJPROP_XDISTANCE,35-25);
      ObjectSet("textSignal"+y,OBJPROP_YDISTANCE,y*(20)+20+8);
      if(cci[y]>=0)col=Lime;else col=Red;
      if(cci[y]>Level_0) col=Aqua;
      if(cci[y]<-Level_0) col=DarkViolet;
      ObjectSetText("textSignal"+y,str[y],15,"Tahoma",col);
     }
*/
    if ( cci0> Level_0 && cci1> Level_1 && cci2> Level_2) { buf0[ sh]=1;
    if ( per != Time[0]) { per = Time[0];
    if( sh<= ExtBars && ExtBars!=-1)
    Alert(Symbol(),Period()," ",
                              TimeYear(Time[ sh]),".",
                              TimeDay(Time[ sh]),".",
                              TimeMonth(Time[ sh]),"; ",
                              TimeHour(Time[ sh]),":",
                              TimeMinute(Time[ sh])," ",
                              "Покупка");}}
    if ( cci0<- Level_0 && cci1<- Level_1 && cci2<- Level_2) { buf0[ sh]=-1;
    if ( per != Time[0]) { per = Time[0];
    if( sh<= ExtBars && ExtBars!=-1)
    Alert(Symbol(),Period()," ",
                              TimeYear(Time[ sh]),".",
                              TimeDay(Time[ sh]),".",
                              TimeMonth(Time[ sh]),"; ",
                              TimeHour(Time[ sh]),":",
                              TimeMinute(Time[ sh])," ",
                              "Продажа");}}
  }
}
//+------------------------------------------------------------------+
 
sergeev >> :

assim para bystop:




E como você mesmo define o pendente da posição aberta?

 
ArtY0m >> :

Como você mesmo faz o pedido pendente?

Primeiro, você precisa determinar o preço de abertura da última posição aberta programmaticamente.

Para isso, você pode usar uma função pré-definida, por exemplo

Função PriceOpenLastPos().
Esta função retorna o preço aberto da última posição aberta. A seleção das posições a serem consideradas é especificada por parâmetros externos:
sy - Nome do instrumento de mercado. Se este parâmetro for definido, a função considerará apenas as posições do instrumento especificado. O valor padrão - "" significa qualquer instrumento de mercado. O valor NULL significa o instrumento atual.
op - Operação comercial, tipo de posição. Valores válidos: OP_BUY, OP_SELL ou -1. O valor padrão -1 significa qualquer posição.
mn - Identificador de posição, MagicNumber. O valor padrão de -1 significa qualquer identificador.
Funções úteis da KimIV

//-------

Insira a própria função no final de seu código.

E você a chama na função START e define o preço de abertura da última posição que você precisa (compra ou venda), por exemplo.

duplo OpenPrice=PriceOpenLastPos(NULL,OP_BUY, MAGIC) ;

 
rid >> :

Primeiro, você deve determinar o preço da última posição aberta programmaticamente.

Para fazer isto, você pode usar uma função pré-definida, por exemplo

Função PriceOpenLastPos().
Esta função retorna o preço de abertura da última posição aberta. A seleção das posições a serem consideradas é definida por parâmetros externos:
sy - Nome do instrumento de mercado. Se este parâmetro for definido, a função considerará apenas as posições deste instrumento. O valor padrão - "" significa qualquer instrumento de mercado. O valor NULL significa o instrumento atual.
op - Operação comercial, tipo de posição. Valores válidos: OP_BUY, OP_SELL ou -1. O valor padrão -1 significa qualquer posição.
mn - Identificador de posição, MagicNumber. O valor padrão de -1 significa qualquer identificador.

Funções úteis da KimIV

//-------

Insira a própria função no final de seu código.

Na função START, você a chama e define o preço de abertura da última posição desejada (compra ou venda), por exemplo

duplo OpenPrice=PriceOpenLastPos(NULL,OP_BUY, MAGIC) ;

Muito obrigado!))

 

No Indicador, se uma condição for cumprida, quero inserir uma linha com uma nota em um arquivo de texto (não importa o que, digamos data e hora).

O arquivo é criado e a linha é acrescentada, mas somente em tempo real. Eu, por outro lado, quero fazer uma nota ao trabalhar na história. Alguém sabe como fazer isso?

Obrigado!