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

 

Desculpe, alex12, mas você parece um bulldozer (sem ofensa, esse é um termo aceito). Você faz algo a partir de peças diferentes e, de alguma forma, consegue compilá-lo, mas não entende o significado do código.

Entre em contato com o serviço de empregos.

 
alex12:

Gera muitos erros


Ao utilizar algumas das funções de Igor Kim, certifique-se de ter suas funções em falta em seu código, que o compilador lhe informa. Encontre-os em sua filial e escreva-os em seu código.
 
chief2000:
...

OrderOpenTime() mostra a hora em que a posição foi aberta, minha pergunta é: como sei a hora em que a ordem STOP foi estabelecida?
O relatório MT4 tem este tempo, mas é possível descobri-lo a partir do código?


Mais uma vez.

Percorra todas as suas ordens de parada em um ciclo "padrão", e para você mesmo, desimprima o valor do OrderOpenTime() para eles - este deve ser o momento em que eles (cada um deles) foram definidos. Aqui está um exemplo para ordens de mercado - ajuste um pouco, ou seja, ou remova esta linha por completo

se ((orderType != OP_BUY) && (orderType != OP_SELL)) continuar;

ou substituí-la por dados das ordens de parada em que você está interessado.

int orderCount = 0; // сбрасываем счетчик ордеров 
      // ------------------------------------------------Считаем только наши ордера---------------------------
   int orderType;
   for (orderIndex = (OrdersTotal() - 1); orderIndex >= 0; orderIndex--)
   {
      if (!OrderSelect(orderIndex, SELECT_BY_POS))     continue; // если ордер не выбран, то идем на следующий открытый
      if(OrderCloseTime()!=0) continue;                          // если тикет принадлежит закрытому ордеру, то берем следующий открытый
      if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != magic))   continue;
      orderType = OrderType();
      if ((orderType != OP_BUY) && (orderType != OP_SELL))   continue;
          ticket = OrderTicket( );                         // Номер ордера
          orderLots = OrderLots();                         // Lots   
          orderProfit = OrderProfit() + OrderSwap();       // Profit
          Price = OrderOpenPrice();                        // Цена открытия рыночного ордера
          SL =  OrderStopLoss();                           // Значение StopLoss ордера
          TP = OrderTakeProfit();                          // Значение TakeProfit ордера 
          Time = O rderOpenTime();
         
                     
         
      orderCount++;                     // считаем ордера (не больше i)           

    }   
 
Roman.:


Mais uma vez.
Percorra todas as suas ordens de parada em um loop "padrão", e para você mesmo, desimprima o valor de OrderOpenTime() para eles - este deve ser o momento em que eles (cada um deles) são definidos. Aqui está um exemplo para ordens de mercado - ajuste um pouco, ou seja, ou remova esta linha por completo

se ((orderType != OP_BUY) && (orderType != OP_SELL)) continuar;

ou substituí-lo por dados de ordens de parada que lhe interessam...

Aqui, nesta etapa, encontrei um dilema - preciso do momento de abrir uma ordem STOP para algumas "estatísticas" e não gostaria que este processo fosse executado o tempo todo, mas apenas em uma certa etapa final. Por esta razão, não precisamos procurar as ordens atualmente abertas (OrdersTotal()), mas procurar entre as ordens já fechadas => OrdersHistoryTotal().
Mas para ordens STOP que já foram fechadas, OrderOpenTime() retorna o tempo de abertura da posição, não o tempo em que a ordem foi colocada.
Como resultado, tudo se resume a isto: é possível recuperar o tempo que as ordens STOP da lista de ordensHistoryTotal(), quando elas foram definidas?
 
chief2000:
Foi aqui que encontrei um dilema - preciso do tempo de abertura do pedido STOP para algumas "estatísticas" e não gostaria que este processo funcionasse o tempo todo, mas apenas em uma certa etapa final. Por esta razão, não precisamos procurar as ordens abertas naquele momento (OrdersTotal()), mas procurar entre as ordens já fechadas => OrdersHistoryTotal().
Mas para ordens STOP que já foram fechadas, OrderOpenTime() retorna o tempo de abertura da posição, não o tempo em que a ordem foi colocada.
Como resultado, tudo se resume a isto: É possível recuperar o tempo que as ordens STOP da lista de ordensHistoryTotal(), quando elas foram estabelecidas?

Sim... O desafio... NÃO CONHECO. Parece que você não pode - especialmente nas "etapas finais"...

Você tem que monitorar constantemente este processo e acompanhá-lo - veja o post de perguntas freqüentes na página anterior.

 
Roman.:

Sim... O desafio... NÃO CONHECO. Parece que você não pode - especialmente nas "etapas finais"...

Você tem que monitorar constantemente este processo e manter o controle - veja o post de perguntas freqüentes na página anterior.

Se nenhuma outra solução for encontrada, usarei ordens da OrderTotal().
De qualquer forma, obrigado!
 
Nesse caso, é mais fácil escrever em um arquivo, menos complicações, e as estatísticas podem ser organizadas conforme você precisa, não o terminal.
 
FAQ:
Nesse caso, é mais fácil escrever em um arquivo, menos complicações, e as estatísticas podem ser organizadas conforme você precisa, não o terminal.
Obrigado!
 

Quero escrever um consultor especializado sobre o padrão pincer.

Eu escolhi

Low2=Low[iLowest(NULL,0,MODE_LOW,10,2)]    
High2=High[iHighest(NULL,0,MODE_HIGH,10,2)]     

if(Low[1]==Low2) bull_pincet=true;
if(High[1]==High2) bear_pincet=true;

   while(true)
      {
       
       if(Total==0 && bull_pincet==true)
        {
         sl=Low[1];
         if(sl<Step)sl=Step;
         tp=Ask+((Ask-sl)*k);
                  
         OrderSend(Symb,OP_BUY,Lts,Ask,3,sl,tp);
         return;
        }

        if(Total==0 && bear_pincet==true)
         {
          sl=High[1];
          if(sl<Step)sl=Step;
          tp=Bid-((sl-Bid)*k);
          OrderSend(Symb,OP_SELL,Lts,Bid,3,sl,tp);
          return;
         }
       break;
      }   

Infelizmente para mim a condição está errada porque 'sl' está ajustado para 100.00000 e 'tp' está mostrando um erro.

Decidi acrescentar uma condição para considerar 1 carrapato.

static datetime TimeSaveH1  = 0;
int init()
{
     TimeSaveH1  = iTime( Symbol(), Period(), 0); // берем открытия время текущего бара
}

int start()
{
         if (TimeSaveH1!=iTime( Symbol(), Period(), 0))
            {
               TimeSaveH1=iTime( Symbol(), Period(), 0); 
            }  

Low2=Low[iLowest(NULL,0,MODE_LOW,10,2)]    
High2=High[iHighest(NULL,0,MODE_HIGH,10,2)]     

if(Low[1]==Low2 && TimeSaveH1===iTime( Symbol(), Period(), 0) bull_pincet=true;
if(High[1]==High2 && TimeSaveH1===iTime( Symbol(), Period(), 0) bear_pincet=true;
   while(true)
      {
       
       if(Total==0 && bull_pincet==true)
        {
         sl=Low[1];
         if(sl<Step)sl=Step;
         tp=Ask+((Ask-sl)*k);
                  
         OrderSend(Symb,OP_BUY,Lts,Ask,3,sl,tp);
         return;
        }

        if(Total==0 && bear_pincet==true)
         {
          sl=High[1];
          if(sl<Step)sl=Step;
          tp=Bid-((sl-Bid)*k);
          OrderSend(Symb,OP_SELL,Lts,Bid,3,sl,tp);
          return;
         }
       break;
      }   




}

o resultado é o mesmo. como posso resolver meu problema?

 
kilnart:

Quero escrever um consultor especializado sobre o padrão pincer.

Eu escolhi

Infelizmente para mim a condição está errada porque 'sl' está ajustado para 100.00000 e 'tp' está mostrando um erro.

Decidi acrescentar uma condição para considerar 1 carrapato.

O resultado é o mesmo. Como resolver meu problema corretamente?

Você tem uma variável Step=100 ? Se for o caso, veja o que você ganha mais com o código.

Razão: