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

 
Desculpe, o que é isso? A função OrderSend funciona para mim, enquanto OrderClose está se exibindo!
 
Dimka-novitsek:
Desculpe, o que é isso? A função OrderSend funciona para mim, enquanto OrderClose está se exibindo!
total = OrdersTotal();
  for(i=total-1;i>=0;i--)
    {
    OrderSelect(i, SELECT_BY_POS);
    type   = OrderType(); result = false;
    switch(type)
          { 
          case OP_BUY       : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), l_SlipPage, Red ); break;
          case OP_SELL      : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), l_SlipPage, Red ); break; 
          }
    if(!result)
      {
      error =  GetLastError(); 
      errorcomment = "Неудалось закрыть ордер №" + OrderTicket() + " " + Symbol() + " " + OrderType() + " " + ErrorDescript(error); 
      Print(errorcomment);
      }  
    }
este é um exemplo de fechamento de todos os pedidos, note que a bai e as vendas são fechadas por lances e pergunta ....
 
Oh, obrigado!!!
 
7777877:

Muito obrigado pelas respostas anteriores. Tudo funciona e quase tudo é claro... Agora sobre esse "quase".

1. Em qual linha (ver arquivo anexo para indicador) existe uma indicação de que a Linha calculada nos dados da matriz deve ser exibida na janela do Terminal do Cliente?

2. Por que é necessária a função IndicatorBuffers (ou melhor, em que situações deve ser usada), se o número de buffers pode ser declarado como uma corda

Obrigado antecipadamente pela resposta

#property indicator_buffers 3                                           //объявляем количество буферов

esta cadeia você declara o número de buffers indicadores visíveis no terminal

   IndicatorBuffers(4);                                                 //устанавливаем общее количество всех индикаторов, участвующих в расчете всех индикаторных линий

esta cadeia declara o número total de buffers utilizados pelo indicador para os cálculos (3 visíveis e 1 oculto)

se você não precisa de buffers adicionais, você não precisará deste cordão

O número de buffers não pode exceder 8 e não deve ser inferior ao valor especificado na propriedade do indicador_buffers. Aqui está um bom exemplo.


 
Bom dia! Diga-me, é realmente necessário normalizar os preços de compra e venda?
NormalizeDouble(Bid, Digits)
Porque eu o tenho assim
for(int i=1; i<=OrdersTotal(); i++) {  
            if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:
         if (OrderSymbol()!=Symbol( ) )continue;      // Не наш фин. инструм
         if (OrderMagicNumber( ) !=magicnumber)continue;
         if (OrderType()==0){ BUY++; ticket=OrderTicket( );Print( "BUY++   " , BUY  ,"  ticket ",ticket);}
         if (OrderType()==1) {SELL++;ticket=OrderTicket( );Print( "SELL++   " , SELL  ,"  ticket ",ticket);}    } }
         
  
  if (strela1<strela2&&SELL==0&&BUY!=0
  ){ udalenie ();
              
   OrderSend(Symbol( ), OP_BUY, lot, Ask, 3*Point, NormalizeDouble( Bid- (stoplos*Point),Digits),   NormalizeDouble( Ask+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE);           
      Print( "strela1<strela2&&BUY==0&&SELL!=0 " , GetLastError()); }
            
  if (strela1>strela2){ udalenie ();
                
   OrderSend(Symbol( ), OP_SELL, lot, Bid, 3*Point, NormalizeDouble( Ask+ (stoplos*Point),Digits),   NormalizeDouble( Ask-( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE) ; 
        Print( "strela1>strela2&&SELL==0&&BUY!=0 " , GetLastError()); }
      
    if (strela1<strela2&&BUY==0&&SELL==0){    
            
           OrderSend( Symbol( ), OP_BUY, lot, Ask, 3*Point, 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)); }
           
   if (strela1>strela2&&BUY==0&&SELL==0){  

Falhas como esta 2012.11.01 11:31:00 AUDUSD,M15: strela1<strela2&&SELL==0&&BUY!=0 129

ERR_INVALID_PRICE 129Preço incorreto Isso não acontecia há anos! Também não aconteceu ontem

 
Dimka-novitsek:
Bom dia! Diga-me, os preços de compra e venda precisam realmente ser normalizados? Porque eu tenho isto

Falhas como esta 2012.11.01 11:31:00 AUDUSD,M15: strela1<strela2&&SELL==0&&BUY!=0 129

ERR_INVALID_PRICE 129 Preço incorreto Nunca aconteceu antes!!!! Também não o vi ontem.

No testador você não precisa fazer, mas no on-line você tem que fazer o que o servidor DC ditar se você quiser trabalhar.
 
Dimka-novitsek:
Bom dia! Os preços de compra e venda precisam realmente ser normalizados?

Falhas como esta 2012.11.01 11:31:00 AUDUSD,M15: strela1<strela2&&SELL==0&&BUY!=0 129

ERR_INVALID_PRICE 129 Preço incorreto Isso não acontecia há anos! Também não foi ontem


Nem sempre assim...

"Lance ou preço de venda incorreto, possivelmente preço não-normalizado. Você precisa atualizar os dados após um atraso de 5 segundos ou mais usando a função RefreshRates e tentar novamente. Se o erro persistir, é necessário parar todas as tentativas de negociação e mudar a lógica do programa". "A PARTIR DA DOCUMENTAÇÃO".

Se em demonstração ou real - não vai funcionar. Você muitas vezes tenta abrir dois pedidos seguidos. Isto funcionará no Testador de Estratégia. Você precisaria de um atraso entre a abertura dos pedidos.

 

Obrigado!!! Colocar na normalização... E o que diabos está acontecendo em tudo!!!!!! Minha cabeça está pegando fogo. Parece mais fácil do que a geometria do ensino médio.


 
Sepulca:


Nem sempre assim...

"Lance ou preço pedido incorreto, possivelmente preço não-normalizado. Você precisa atualizar os dados após um atraso de 5 segundos ou mais usando a função RefreshRates e tentar novamente. Se o erro persistir, é necessário parar todas as tentativas de negociação e mudar a lógica do programa". "A PARTIR DA DOCUMENTAÇÃO".

Se em demonstração ou real - não vai funcionar. Você muitas vezes tenta abrir dois pedidos seguidos. Isto funcionará no Testador de Estratégia. Colocar um atraso entre as ordens abertas.

O que significa "nem sempre"? O código deve ser UNIVERSAL, ou seja, deve trabalhar com QUALQUER corretora (independentemente do número de dígitos nas cotações e de todos os tipos de truques do servidor da corretora para recusar a execução pontual das ordens de negociação)!
 
E há algo de errado com os opiáceos ses!!!