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

 

Olá a todos.

Decidi me tornar um escritor. Eu queria escrever algo na MQL4. Eu li algo sobre isso e decidi escrever um Expert Advisor, que abriria posição quando a RSI com período 8 cruzasse 70 e fecharia posição quando cruzasse 30 e nada mais aconteceria. Eu o escrevi, aqui está o código

//+------------------------------------------------------------------+
//| 4doc.mq4 |
//| Alex |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#propriedade copyright "Alex
#link da propriedade "http://www.metaquotes.net"

//---- parâmetros de entrada
PerRSI=8;
intNamber=77771;

Lotes duplos externos=1,0;

/+------------------------------------------------------------------+
//| função de início especializado |
//+------------------------------------------------------------------+
int start()
{
int
cnt=0,
bilhete,
total;
duplo
rsi_0, //valor. rsi_0 corrente
rsi_1; // Valor. rsi_1 1ª barra
se (Bars<100)
{
Impressão ("barras com menos de 100");
retorno(0);
}
rsi_0=iRSI(NULL,0, PerRSI,0,0); // Barra de corrente
rsi_1=iRSI(NULL,0, PerRSI,0,1); // Barra de corrente mais 1
total=OrdensTotal();
if(total<1)
if(rsi_0 < rsi_1 && rsi_0 > 70) // Se a linha tiver ultrapassado os 70
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0, "My RSI", MagicNamber,0,Green);
if(bilhete>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Imprimir("Pedido de venda aberto : ",OrderOpenPrice())
}
else Print("Error opening SELL order : ",GetLastError()));
retorno(0);
}
for(cnt=0;cnt<total;cnt++)
{
RefreshRates();
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && // esta é uma posição aberta? OP_BUY ou OP_SELL
OrderSymbol()==Symbol()) // combinação de ferramentas?
{
if(OrderType()==OP_SELL) // posição está aberta
{
if(rsi_0 > rsi_1 && rsi_0 < 30) // Se a linha tiver ultrapassado 30
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // posição fechada
retornar(0); // sair

}}}}}

Eu o testei e funciona principalmente como que eu queria. Decidi mudar o código, abrir uma posição quando o SSI - 14 cruza o nível 100, e fechar uma posição quando cruza o nível 100. Mudei o código RSI para CCI , aqui está ele.

//+------------------------------------------------------------------+
//| CCI-DOC.mq4 |
//| Alex |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#propriedade copyright "Alex
#link da propriedade "http://www.metaquotes.net"

//---- parâmetros de entrada
perCCI=14;
Externo interno MagicNamber=88881;

Lotes duplos externos=1,0;

//+------------------------------------------------------------------+
//| função de início especializado |
//+------------------------------------------------------------------+
int start()
{
int
cnt=0,
bilhete,
total;
duplo
cci_0, // valor cci_0. cci_0 corrente
cci_1; // valor cci_1. cci_1 1ª barra
se (Bars<100)
{
Impressão ("barras com menos de 100");
retorno(0);
}
cci_0=iRSI(NULL,0, PerCCI,0,0); // Barra de corrente
cci_1=iRSI(NULL,0, PerCCI,0,1); // barra de corrente mais 1
total=OrdensTotal();
if(total<1)
if(cci_0 < cci_1 && cci_0 > 100) // if(line has crossed 100
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0, "My CCI", MagicNamber,0,Green);
if(bilhete>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Imprimir("Pedido de venda aberto : ",OrderOpenPrice())
}
else Print("Error opening SELL order : ",GetLastError()));
retorno(0);
}
for(cnt=0;cnt<total;cnt++)
{

OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && // esta é uma posição aberta? OP_BUY ou OP_SELL
OrderSymbol()==Symbol()) // combinação de ferramentas?
{
if(OrderType()==OP_SELL) // posição está aberta
{
if(cci_0 > cci_1 && cci_0 < -100) // se a linha tiver atravessado -100
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // posição fechada
retornar(0); // sair
}}}}}

Começou a testar a CCI bem, nada acontece, não vende ou compra, nenhum erro no log, ao final do teste abre o gráfico de curv as, mas não é CCI, mas RSI 70-30 com período 14 Talvez um dos escritores experientes entenda e diga por que e como consertá-lo.

 
pepsi писал(а) >>
Então a demonstração no registro mostra tudo mais claramente. É mais claro onde procurar o erro. Por minha conta...

>> obrigado

 

Olá novamente!!!!!!!

Eu gostaria de /não-intrusivamente/;-)) lembrá-lo de sua pergunta na p. 64 sobre as condições comerciais para MA... obrigado antecipadamente (por um chute nas calças para um boneco)

 

Cavalheiros, podem me dizer se eu uso vários gráficos de tempo diferentes do mesmo instrumento comercial no terminal?

Como o tráfego é consumido pelo programa? Consome tráfego do período mínimo de tempo, ou tráfego de todos os períodos de tempo?

 
igrok2008 >> :

Olá novamente!!!!!!!

Eu gostaria de /não-intrusivamente/;-)) lembrá-lo de sua pergunta na p. 64 sobre as condições comerciais para MA... obrigado antecipadamente (pelo pontapé nas calças para os manequins)

int start()
  {
//----
    double MA_0=iMA(NULL, 0, pMA, pSh, mode, price,0);
    double MA_1=iMA(NULL, 0, pMA, pSh, mode, price,1);

    перед использованием в коде open_1 или  open_0 их нужно инициализировать, т. е. объяснить программе
    к виду каких данных эти опены относятся( целые, дробные, строчные, логические)

    double open_0=Open[0]; //  double - дробное число. 0 и 1 это номера ячееек,
    double open_1=Open[1]; // которые в данном случае являются номерами баров
        
    if( MA_1< Open[1] && MA_0>Open[0])
     if( CheckOrders(OP_SELL))//продажа
      {
       if(!OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, 0, 0, NULL, MagicNumber))
         Print("Не открыт ордер Buy. Ошибка №", GetLastError()); 
       }
       
    if( MA_1>Open[1] && MA_0<Open[0])
     if( CheckOrders(OP_BUY))//покупка
      {
       if(!OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, 0, 0, NULL, MagicNumber))
         Print("Не открыт ордер Sell. Ошибка №", GetLastError()); 
       }
//----
   return(0);
  }
 
KONDOR >> :

Obrigado pela resposta!!!

1. Deixe-me esclarecer, as duas linhas com double open_0 e double_1 precisam ser escritas ANTES das linhas double MA, ou é não-crítico ??????...

2. Nas condições comerciais, você pode substituir open[0,1] por open_0,1 ????????.....

 
igrok2008 >> :

Obrigado pela resposta!!!

1. Deixe-me esclarecer, as duas linhas com double open_0 e double_1 precisam ser escritas ANTES das linhas double MA, ou é não-crítico ??????...

2. Você pode substituir open[0,1] por open_0,1 ????????.....

1. não crítico.

2. pode

 

Ajude, por favor... Posso ser preguiçoso, mas não consigo descobrir como conectar o programa para negociar em uma conta demo ou real... Por favor, explique o que escrever e onde cantar... obrigado de antemão!))

 
Eu escrevi - eu escrevi, eu negociei no testador, mas na demonstração ou real não quer fazer transações, e em geral não há sinais, embora eles devam estar lá(((
 
keekkenen >> :

1. não crítico

2. pode

CGFCB<J i.e. OBRIGADO!!!!