[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 483

 
Em seguida, você tem que apagar uma venda na seta vermelha e colocar uma compra. De repente, duas ordens são apagadas!!! Duas ordens, a que está claramente definida e outra que não parecia estar lá!!! Tudo bem, que se lixe... Surge o erro 129 e não há ordem. Desculpe-me se eu tenho confundido todos os bons ajudantes voluntários como este.
 
//+------------------------------------------------------------------+
//|                                                     советник.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#include <WinUser32.mqh>
  extern double  lot         = 1;                          
  extern int     taymfreym   = 0 ;                           
  extern double  stoplos     = 200 ;                          
  extern double  takeprofit  = 500 ; 
  extern int     magicnumber = 350;
  extern int     ControlBar  = 1;      // номер бара на котором снимаем показания индикатора                     


void BreakPoint()
{//if (!IsVisualMode()) return(0);
    keybd_event (19,0,0,0);
    Sleep (10);
    keybd_event (19,0,2,0);
}

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   Print (   "  НачалоНачал " ); 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int i;
int start()
{
  //Print (   "  Начало " ); 
//----
    for (int A = 0; A <100 ; A++) // ни к чему этот перебор баров
    {
        double strela1 = iCustom (NULL, taymfreym, "индикатор", 2, A),
               strela2 = iCustom (NULL, taymfreym, "индикатор", 3, A);
        int BUY = 0, SELL = 0, ticket; 
        Print (A, "  strela1 " , strela1 , "    strela2  " , strela2);
    
    for (int i = OrdersTotal() - 1; i >= 0; i--)
    {  
        if (!OrderSelect (i - 1, SELECT_BY_POS)) continue;  // Если есть следующий
        if (OrderSymbol() != Symbol()) continue;      // Не наш фин. инструм
        if (OrderMagicNumber() != magicnumber) continue;
        int type = OrderType();
        if (type > 1) continue;
        ticket = OrderTicket();
        if (type == 0) {BUY++; Print ("BUY++   " , BUY  ,"  ticket ", ticket); break;}
        if (type == 1) {SELL++; Print ("SELL++   " , SELL  ,"  ticket ", ticket); break;}
    }
    if (strela1 < strela2)
    {
        if (SELL > 0) udalenie (OP_SELL);
        if (BUY == 0)
        {
            OrderSend (Symbol( ), OP_BUY, lot,NormalizeDouble(Ask, Digits), 3, NormalizeDouble( Bid- (stoplos*Point),Digits),   NormalizeDouble( Ask+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE);           
            Print ("strela1>strela2&&BUY==0&&SELL==0   " , GetLastError()  ,"  Ask ",Ask,"   stoplos= NormalizeDouble( Bid- (stoplos*Point),Digits)  ",
            NormalizeDouble ( Bid- (stoplos*Point),Digits),"    takeprofit= NormalizeDouble( Ask+( takeprofit*Point),Digits) ", NormalizeDouble( Ask+( takeprofit*Point),Digits));
        }
    }
    else if (strela1 > strela2)
    {
        if (BUY > 0) udalenie (OP_BUY);
        if (SELL == 0)
        {
            OrderSend (Symbol( ), OP_SELL, lot, NormalizeDouble (Bid, Digits), 3, NormalizeDouble( Ask+ (stoplos*Point),Digits),   NormalizeDouble( Ask-( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE) ; 
            Print ("strela1>strela2&& OP_SELL  " , GetLastError()   ,"  Bid ",Bid,"    stoplos=   NormalizeDouble( Ask- (stoplos*Point),Digits)  ",
            NormalizeDouble (Ask- (stoplos*Point),Digits),"    takeprofit= NormalizeDouble( Bid+( takeprofit*Point),Digits) ", NormalizeDouble(Ask+( takeprofit*Point),Digits));
            Print( "strela1>strela2&& OP_SELL   " , GetLastError()  ," (stoplos*Point) ",(stoplos*Point),"   Point  ", Point,"   Digits  ", Digits);
        }
    }
    }
    BreakPoint();     
//----
    return (0);
}
//+------------------------------------------------------------------+

void udalenie (int Type = -1)
{
    int total = OrdersTotal();
    for (i = total - 1; i >= 0; i--)
    {
        if (!OrderSelect (i, SELECT_BY_POS)) continue;
        if (OrderSymbol() != Symbol()) continue;      // Не наш фин. инструм
        if (OrderMagicNumber( ) != magicnumber) continue;
        int type = OrderType();
        if (type > 1) continue;
        if (Type > -1) if (Type != type) continue;
        bool result = false;
        switch (type)
        { 
            case OP_BUY       : result = OrderClose (OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 3, CLR_NONE ); break;
            case OP_SELL      : result = OrderClose (OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 3, CLR_NONE ); break; 
        }
        if (!result)
        {
            int error =  GetLastError(); 
            string errorcomment = "Неудалось закрыть ордер №" + OrderTicket() + " " + Symbol() + " " + OrderType() + " " + error; 
            Print (errorcomment);
        }  
    }       
}
 
Espere, desculpe-me, vou colocar os deslizes por todo o lado!
 
Dimka-novitsek:
Em seguida, você tem que apagar uma venda na seta vermelha e colocar uma compra. De repente, duas ordens são apagadas!!! Duas ordens, a que está obviamente definida e outra que não parecia estar lá!!! Tudo bem, que se lixe... Surge o erro 129 e não há ordem. Você me perdoará por confundir todos os bons ajudantes voluntários

Dimka - dê-me seu código em minha mensagem pessoal - eu vou brincar - eu não tenho nada para fazer enquanto meu"grail" está sendo testado ... e meu cérebro precisa de um exercício... E não se esqueça da indulgência...
 

Olá a todos, sou um novato, então por favor não me dêem muitos pontapés. Algumas perguntas se acumularam.

1) Onde posso baixar o histórico completo das citações. Entendi que no terminal MT4 as cotações do MetaQuotes são baixadas por padrão, mas há uma lacuna de janeiro a outubro de 2012 e ela não é fechada ao fazer o download novamente. Isto coloca em questão toda a história a partir daí.

2) A história tem datas anteriores a 1999, os dados para eles são estranhos, muito poucos, mesmo por minutos. Alguém os leva em consideração ou os apaga.

3) E outros disparates estão acontecendo com o teste. Decidi tentar escrever um simples Expert Advisor: Buy when Open[1]<MA1 && Close[1]>MA1. Ao testar, o MA (exponencial) sempre mostra valores diferentes, dependendo da data inicial do teste. Quanto mais longo for o período МА (por exemplo 1000-1200) maior é o erro. Qual é o problema?

 
Dimka-novitsek:

Obrigado! O código agora é mais simples. Certamente mais simples.

Obrigado pelo Slippage!

O laço para (int A = 0; A <100 ; A+++) // não precisamos desta busca de barras, apenas me ajuda a ver pelo registro que a EA fez pedidos exatamente onde estão as setas ou onde está o número do erro. A questão é que não houve sinais no testador. Vi nas mesmas impressões que as variáveis seta1 e seta2 eram apenas zero em todas as barras e foi assim que consegui sair da situação.

O ciclo pode, naturalmente, ser contado em qualquer direção. Mas novamente vejo erro 129 em todos os lugares! Vejo as setas do indicador no gráfico e quero ter certeza de que as encomendas foram feitas por eles. Então, em uma captura de tela nas variáveis iniciais as setas 1 e 2 são iguais, mais adiante em 17 barras a partir de zero, a ordem é definida - okey, super! Depois, as mensagens da impressora de que há uma venda com um sinal mais ou menos, e as setas em outras barras são iguais - great!!!!

Sobre o ciclo:

for (int A = 0; A <100 ; A++)

Antes de fazer algo (escrever código), você precisa ter uma idéia clara do que quer obter. Você tem este indicador em cada tick, e pode ter um layout completo de suas leituras. Desta forma (loop) você terá saída nas variáveis strela1 e strela2 na barra 100 e poderá negociar por estas leituras (inverno passado)... :))) Não prestei atenção de imediato - você incluiu operações comerciais no laço de leituras indicadoras - um total de P... Claro, você é quem melhor sabe. :)))

 
Não, eu preciso do laço para ver a entrada/saída, ou seja, para testar o robô. Como faz encomendas, como comete erros. Bem, não testa no testador...
 
Dimka-novitsek:
Não, eu preciso do laço para ver a entrada/saída, ou seja, para testar o robô. Como faz encomendas, como comete erros. Não testa no testador...

O que posso dizer - GENIAL... Boa sorte!

P.S. Em meu código encontrei um pequeno erro em relação à mudança de direção de enumeração de pedidos, até reduziu o código, bem como fez uma tentativa de criar uma otimização no testador (verifique você mesmo).
E tenho a suspeita de que você não leu os dados corretamente a partir do indicador. O indicador tem vários amortecedores (4 na minha versão). Alguns, como aqueles que desenham setas - têm um valor SOMENTE onde está a seta. Para procurar sinais em tais buffers, você precisa organizar um loop (while()) com a condição de que o valor de retorno não seja igual (na minha variante EMPTY_VALUE) a um valor "vazio". Onde não há "flechas" (nestes amortecedores), o sinal deve ser procurado comparando o valor de retorno com o preço.

Arquivos anexados:
lxvhlxyx.mq4  5 kb
 

Bom dia ou boa noite! Uma pergunta para os desenvolvedores do mt4 e também para todos os outros.

Quais são os requisitos mínimos do sistema para o cliente MT?

Quero executá-lo em meu hardware antigo: Athlon 800mg, 512mb, XP SP3. Quando executo a MT 4 ou 5, ela se desliga após 2 segundos. O problema claramente não está no final ou hardware, este hardware roda Visual Studio com depurador (eu mesmo sou um programador), e a exceção não surge no sistema (já que meu depurador não funciona). Acho que o próprio cliente não gosta de algo e, como resultado, fecha. Então a pergunta, qual é a razão e o que o mt não gosta, realmente a freqüência da CPU? ))

 
Dimka-novitsek:
Espere, desculpe-me, vou colocar os deslizes por todo o lado!
Dimitri, guarde seus pensamentos para si mesmo e coloque suas perguntas aqui.