[Arquivo!] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por ela. Não poderia ir a lugar algum sem você - 2. - página 276

 
BBSL:

Se estamos falando de carrapatos, você pode escrever um código que salve o arquivo de dados, mas precisará carregar a partir de um arquivo no ekspert. Faria sentido simplesmente manter o computador funcionando?
Acho que eu deveria usar a segunda opção. Obrigado, BBSL.
 
artmedia70:

O que você está fazendo é estranho... Ao abrir uma posição, você atribui o número do bilhete a uma variável, mas você verifica outra.

E OrderSend() retorna -1 (menos um) em caso de falha, e você verifica se há menos de um, quando você precisa de menos de zero

Esta é a primeira coisa que chama sua atenção. Mas acho que você tem muitas coisas interessantes lá... :)


Ooh-ha-ha-ha, sim, há muita diversão... Especialmente quando você começa a verificar))

Vamos lá, mais uma vez... É assim,

Eu abro ordem:

order_id = OrderSend(Symbol(),OP_SELL,1.0,Bid,3,0,0,"expert comment",255,0,Red);
   if(order_id<0)
     {
      error=GetLastError();
      Print("send_orders, error = ",ErrorDescription(error));
      return;
     }
     } 

Ordem de fechamento:

if(OrderSelect(0, SELECT_BY_POS)==true){

OrderClose(OrderTicket(),1,Bid,3,Red);

}

Certo, dada uma única ordem?)

 
hedger:
Aparentemente, a segunda opção deve ser usada. Obrigado, BBSL.

De nada, espero que isso realmente ajude))
 
artmedia70:

O que você está fazendo é estranho... Ao abrir uma posição, você atribui o número do bilhete a uma variável, mas você verifica outra.

E OrderSend() retorna -1 (menos um) em caso de falha, e você verifica se há menos de um, quando você precisa de menos de zero

Esta é a primeira coisa que chama sua atenção. Mas acho que você tem muitas coisas interessantes lá... :)


Entendo, o número do tikit deve ser obtido desta forma:

nomer_ticketa = OrderSend(Symbol(),OP_BUY,1.0,Ask,3,0,0,"expert comment",255,0,Green);
   if(ticket<1)
 
artmedia70:

O que você está fazendo é estranho... Ao abrir uma posição, você atribui o número do bilhete a uma variável, mas você verifica outra.

E OrderSend() retorna -1 (menos um) em caso de falha, e você verifica se há menos de um, quando você precisa de menos de zero

Esta é a primeira coisa que chama sua atenção. Mas acho que você tem muitas coisas interessantes lá... :)


Respeito, obrigado!))
 
BBSL:


Eu entendo, você tem que obter o número do tickit assim:

Sabe, com apenas um pedido, pode funcionar, mas se você ainda o abrir manualmente, não será o mesmo. O número do bilhete deve ser gravado em uma variável, e após a seleção do pedido devemos comparar seu bilhete com o bilhete armazenado:

 if (OrderTicket()==number_ticket) {
   // ... код для работы с выбранным ордером при совпадении тикетов
   }

E em geral, a seleção da ordem deve ser feita usando a função OrderSelect() no laço:

for (i=0; i<OrdersTotal(); i++) {                    // цикл по всем рыночным ордерам терминала
   if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { // Если выбран любой рыночный ордер с индексом i
      if (OrderSymbol()!=Symbol())     continue;   // Если символ не текущего графика, переходим к выбору следующего ордера
      if (OrderMagicNumber()!=Magic)   continue;   // Если его магик не совпадает с магиком советника - переходим к выбору следующего
//... далее можно проверять другие параметры выбранного ордера, но в этом месте уже есть выбранный ордер текущего графика и номером магика советника
      if (OrderTicket()==number_ticket) {          // проверяем тикет выбранного ордера и, если есть совпадение, выполняем с ним дальнейшие действия
         // ... код, выполняющий дальнейшие действия с найденным нужным ордером ...
         }
      }
   else if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) // Иначе, если не удалось выбрать ордер
      Print ("Ошибка при выборе ордера из списка рыночных ордеров = ", GetLastError());  // Выведем сообщение об ошибке и её номер в журнал.
   }

Este é apenas um exemplo para entender, não o código de trabalho acabado, se é que alguma coisa... :)

 
artmedia70:

Se você tiver apenas um pedido, ele pode funcionar, mas se você abrir mais manualmente, não será o mesmo. O número do bilhete deve ser armazenado em uma variável, e após selecionar um pedido, devemos comparar seu bilhete com o armazenado:

E, em geral, a seleção de pedidos deve ser feita usando a função OrderSelect() no laço:

Este é apenas um exemplo para entender, e não um código de trabalho completo, se é que há alguma coisa... :)




Ao fechar pedidos, se houver mais de um pedido, devemos usar este laço:

int i, k=OrdersTotal();

  for (i=k-1; i>=0; i--) {
 //...
 
bolt:

Ao fechar pedidos, se houver mais de um pedido, deve ser utilizado um ciclo como este:

Leia a última linha do meu post. Quem disse que eu escrevi um exemplo para fechar?

O resto é a pura verdade. Escreva seu próprio livro didático.

 

Você pode me dizer por que a OrderOpenPrice não funciona? A tarefa é procurar no pool um pedido colocado a um determinado preço e, se não estiver lá, colocar o pedido e colocar uma bandeira que tenha sido colocada.


for(int i=1 ; i <= OrdersTotal() ; i++)
   {
   if(OrderSelect(i-1,SELECT_BY_POS,MODE_TRADES))
      {
      if(OrderOpenPrice() == price) 
        {
        orderset = true;
        }
      }
   }
     
if((orderset==false)
   {
   OrderSend(Symbol(),OP_SELLLIMIT,baselot,price,3,NULL,price-10,"Comment",0001+i,0,White); 
   }
 
Pyro:

Você pode me dizer por que a OrderOpenPrice não funciona? A tarefa é procurar no pool um pedido colocado a um determinado preço e, se não estiver lá, colocar o pedido e colocar uma bandeira que tenha sido colocada.



Não podemos comparar números reais.