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 756

 
ssn1:
Estou acostumado ao meu próprio sistema de arquivamento.
Eu já sobrevivi com segurança com o Guardião: a destruição do disco rígido do meu PC, a falha do meu laptop. E eu não perdi um único byte do meu código. O Cofre é conveniente.
 

Boa tarde.

Eu escrevi um programa de exercícios. Não está funcionando por alguma razão.

Testei-o no testador de estratégia entre 29 de setembro e 15 de outubro.

O programa deveria funcionar assim: eu faço uma compra. Quando o preço cai para 0,010 ele deve vender com prejuízo.

Ocorre uma compra. Não há venda. Eu começo a visualizar e vejo que o preço não é apenas 0,010 mais baixo, mas muito mais alto. Estranho.

// -------- variáveis --- Início -----
duplo externo L1=0,01; // tamanho do lote para compra
duplo externo L1n=0,01; // tamanho do lote para compra (lote normalizado)
dobro externo AktualAsk=0,0; // preço atual da licitação
duplo AktualBid externo=0,0; // preço de venda real
int int int ticketlackmus=1; // indicador de abertura de ordem bem sucedida.
bilhete int externo1=0; // bilhete int
bool externo PozOtk1=verdadeiro;
// -------- variáveis --- Fim -----
int init()
{
retorno(0);
}


int start()
{
se (PozOtk1==verdadeiro)
{
// posição aberta
ticketlackmus=1;
enquanto (ticketlackmus>0)
{
Alerta (" Abrir primeira posição ");
RefreshRates();// Atualização de dados
AktualAsk=NormalizeDouble(Ask,Digits); // por preço
L1n=NormalizeDouble(L1,2); // para o lote.
ticket1=OrderSend ("GBPUSD", OP_BUY, L1n, AktualAsk, 5, 0, 0, 0, 0, 0, CLR_NONE)
se (ticket1>0) ticketlackmus=-1;
{
Alerta (" ORDEN OPEN ", ticket1, ", ticketlackmus);
}
}
PozOtk1=falso;
Alerta (" PozOtk1 ", PozOtk1);
}

RefreshRates();// RefreshRates()
AktualBid=NormalizeDouble(Bid,Digits); // por preço
if (AktualBid<=AktualAsk-0.010 && PozOtk1===falso)
{
RefreshRates(); // Atualização de dados
OrderSelect(ticket1, SELECT_BY_TICKET;)
L1n=NormalizarDuplo(L1,2); // para o lote
OrderClose (ticket1, L1n, AktualBid, 5);
PozOtk1=verdadeiro;
}

retorno(0);
}

int deinit()
{
retorno(0);
}


Ozero.

 

Favor usar o botão mágico SRC ao inserir o código:

Insira o código corretamente no fórum

 
// -------- переменные --- Н -----
extern double L1=0.01;            // размер лота для покупки 
extern double L1n=0.01;           // размер лота для покупки 
extern double AktualAsk=0.0;
extern double AktualBid=0.0;
extern int ticketlackmus=1;       // "лакмусовая бумажка" успешности откарытия ордера
extern int ticket1=0;             // тикет 
extern bool PozOtk1=true;
// -------- переменные --- К ----- 
int init() 
   {
      return(0);
   }


int start()    
   {
      if (PozOtk1==true) 
         {     
// Открытие позиции
             ticketlackmus=1;
             while (ticketlackmus>0)
                {
     Alert (" Открытие первой позиции ");
                   RefreshRates();                                        // Обновление данных 
                   AktualAsk=NormalizeDouble(Ask,Digits); //для цены
                   L1n=NormalizeDouble(L1,2); //для лота.
                   ticket1=OrderSend ("GBPUSD", OP_BUY, L1n, AktualAsk, 5, 0, 0, 0, 0, CLR_NONE);    
                   if (ticket1>0) ticketlackmus=-1;
                   {
                   Alert (" ОРДЕР ОТКРЫТ ", ticket1, "  ", ticketlackmus);
                   }
                }
             PozOtk1=false; 
             Alert (" PozOtk1 ", PozOtk1);
          }

      RefreshRates();                                        // Обновление данных 
      AktualBid=NormalizeDouble(Bid,Digits); //для цены
           if (AktualBid<=AktualAsk-0.010 && PozOtk1==false)
       {                              
                     RefreshRates();    // Обновление данных 
                     OrderSelect(ticket1, SELECT_BY_TICKET);   
                     L1n=NormalizeDouble(L1,2); //для лота
                     OrderClose (ticket1, L1n, AktualBid, 5);
                     PozOtk1=true; 
       }

return(0);
   }



int deinit()                                   
   {
      return(0);
   } 

 

Se uma posição é aberta em um determinado símbolo (neste caso - "GBPUSD"), então é aconselhável levar todos os dados sobre este símbolo através do marketinfo, ou seja, não apenas AktualAsk=NormalizeDouble(Ask,Digits ); aktualAsk=MarketInfo( "GBPUSD",MODE_ASK);

E assim, quaisquer dados de mercado devem ser tomados, a fim de evitar.

 
// -------- переменные --- Н -----
extern double L1=0.01;            // размер лота для покупки 
extern double L1n=0.01;           // размер лота для покупки 
extern double AktualAsk=0.0;
extern double AktualBid=0.0;
extern int ticketlackmus=1;       // "лакмусовая бумажка" успешности откарытия ордера
extern int ticket1=0;             // тикет 
extern bool PozOtk1=true;
// -------- переменные --- К ----- 
int init() 
   {
      return(0);
   }


int start()    
   {
      if (PozOtk1==true) 
         {     
// Открытие позиции
             ticketlackmus=1;
             while (ticketlackmus>0)
                {
     Alert (" Открытие первой позиции ");
                   RefreshRates();                                        // Обновление данных 
                   //AktualAsk=NormalizeDouble(Ask,Digits); //для цены
                   AktualAsk=MarketInfo( "GBPUSD",MODE_ASK);
                   L1n=NormalizeDouble(L1,2); //для лота.
                   ticket1=OrderSend ("GBPUSD", OP_BUY, L1n, AktualAsk, 5, 0, 0, 0, 0, CLR_NONE);    
                   if (ticket1>0) ticketlackmus=-1;
                   {
                   Alert (" ОРДЕР ОТКРЫТ ", ticket1, "  ", ticketlackmus);
                   }
                }
             PozOtk1=false; 
             Alert (" PozOtk1 ", PozOtk1);
          }

      RefreshRates();                                        // Обновление данных 
      AktualBid=NormalizeDouble(Bid,Digits); //для цены
           if (AktualBid>=AktualAsk+0.010 && PozOtk1==false)
       {                              
                     RefreshRates();    // Обновление данных 
                     OrderSelect(ticket1, SELECT_BY_TICKET);   
                     L1n=NormalizeDouble(L1,2); //для лота
                     OrderClose (ticket1, L1n, AktualBid, 5);
                     PozOtk1=true; 
       }

return(0);
   }



int deinit()                                   
   {
      return(0);
   } 
evillive:

Se uma posição abre sobre um símbolo específico (neste caso - "GBPUSD"), então é aconselhável levar todos os dados também sobre este símbolo via marketinfo, ou seja, não apenas AktualAsk=NormalizeDouble(Ask,Digits); aktualAsk=MarketInfo( "GBPUSD",MODE_ASK);

E assim, qualquer dado de mercado deve ser tomado, para evitar.

Obrigado Evillive!

Eu fiz mudanças. Mas eu já comecei a comprar. Nenhuma venda após as mudanças. Teste M15 de 30 de setembro de 2014 até meados de outubro.



 
Ozero:

Obrigado, Evillive!

Fez a mudança. Mas, de qualquer forma, a compra estava em andamento. Nenhuma venda após a mudança. Teste M15 de 30 de setembro de 2014 até meados de outubro.



Encontre onde no código acima pode haver uma venda
 
OrderClose (ticket1, L1n, AktualBid, 5);
 
Ozero:
Este é o encerramento do pedido. Onde está a abertura da ordem de venda. Não está no código acima
 
Eu quis dizer que a ordem não fecha :( Desculpe se eu não coloquei dessa forma, sou novo nisso.
Razão: