Características úteis da KimIV - página 87

 
keekkenen писал(а) >>

Não, isso não vai funcionar... um pedido - um lote, se você abriu um pedido com 3 lotes então você não pode dividir o lote do jeito que você quer - primeiro 1, depois 1 e depois 1 - o pedido fecha o lote inteiro, ou seja, o pedido fecha com o mesmo lote que foi aberto, você não pode fechar os pedidos em partes...

você está enganado, tenho uma loja que fecha muito em partes

 

nenhuma nova ordem, é claro?

 
keekkenen 17.07.2009 15:48
hope писал(а) >> não é a mesma coisa. Um terço do lote está fechado (por uma das condições - digamos que o preço tenha atingido +150 bps). A segunda terceira fechará, digamos, quando +300pts da abertura, etc.

Não, não funciona assim... um pedido - um lote, se você abre um pedido com 3 lotes, então você não pode dividir o lote de forma alguma - primeiro 1, depois 1 e depois mais 1 - o pedido fecha o lote inteiro, ou seja, o pedido fecha com o lote com o qual foi aberto, você não pode fechar os pedidos de forma fragmentada...

...........................

".... você não pode dividir o pedido em lotes..." - por quê? Tecnicamente, foi implementado há muito tempo, e graças a Roger e KimIV na p.85 o erro de 131 lotes normalizados foi evitado. Além disso, a afirmação "...um pedido, um lote, e se você abrir um pedido com 3 lotes, então você não pode dividi-lo como quiser: primeiro 1, depois 1..." é incorreta: um pedido, assim como um lote, consiste no volume: 0,03, 0,3, 3... e é silenciosamente fechado por peças: 0,01, 0,1, 1... certo?

 

E o ponto do meu último pedido foi o seguinte: é possível fechar TODAS as posições sem recorrer a arrays, mas utilizando cálculos padrão e somando-as como

   BuyTotalOp=0;                                // Количество Buy ордеров
   SellTotalOp=0;                               // Количество Sell ордеров
   for (int i=1; i<=OrdersTotal(); i++)         // Цикл перебора ордер
      {
      if (OrderSelect( i-1, SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:
         if (OrderSymbol()!= Symb)continue;      // Не наш фин. инструм
         if (OrderType()>1)                     // Попался отложенный
           {
            Alert("Обнаружен отложенный ордер. Эксперт не работает.");
            return;                             // Выход из start()
           }
         if (OrderType()==OP_BUY)
           {
            BuyTotalOp++;                         // Счётчик ордеров Buy

Tenho apenas a sensação de um navio cansado que navegou no oceano esperando um farol para me dizer se é necessário navegar nesta direção ou dar a volta e tentar outro caminho ...

Igor - estamos destruindo sua filial por nada?

 

Você pode fechar todos os pares de cada vez, mas pares diferentes, por exemplo

1,2,1,2,2,2,1,2 volume total sobreposto 1-2-1+2+2+2+1+2=3 lotes

Resumindo, obtemos o buy-summer 3 lotes e estabelecemos o contador deste volume vendemos 3 lotes

e depois fechamos o bloco bi.

*

Mas para responder à pergunta: é possível fechar todas as posições?

sim é possível, um após o outro, com um roteiro é rápido, rápido!

Os próprios roteiros ou as funções de fechamento foram publicados mais de uma vez.

E, ao instalá-los, você pode fechar tudo de uma só vez e por critérios, por exemplo

- por um símbolo específico

- apenas bai ou apenas vender

- somente rentável

Correspondentemente, são possíveis combinações de critérios...

 

Por favor, ajude a fechar o pedido em qualquer condição que você goste e ele simplesmente não funciona.

Agradecemos antecipadamente

Arquivos anexados:
help.rar  7 kb
 

Cobrirá tudo!!!

void CloseAll() 
{ 
   for (int i=OrdersTotal()-1; i>=0; i--) 
      { 
      if (OrderSelect( i, SELECT_BY_POS, MODE_TRADES)==false) break; 
      if (OrderType()==OP_BUY      ) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),100); 
      if (OrderType()==OP_SELL     ) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),100); 
      if (OrderType()==OP_BUYSTOP  ) OrderDelete(OrderTicket()); 
      if (OrderType()==OP_SELLSTOP ) OrderDelete(OrderTicket()); 
      if (OrderType()==OP_BUYLIMIT ) OrderDelete(OrderTicket()); 
      if (OrderType()==OP_SELLLIMIT) OrderDelete(OrderTicket()); 
      }  
}

Só fechará as poses abertas.

void CloseAll2() 
{ 
   for (int i=OrdersTotal()-1; i>=0; i--) 
      { 
      if (OrderSelect( i, SELECT_BY_POS, MODE_TRADES)==false) break; 
      if (OrderType()==OP_BUY      ) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),100); 
      if (OrderType()==OP_SELL     ) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),100); 
      } 
}

Exemplo de chamada.

// Скрипт. Закрыть все ордера.mq4 -----------------------------------
#include <WinUser32.mqh> 

void start() 
   { 
   if(MessageBox("Закрыть (удалить) все ордера?",
   "Скрипт", MB_YESNO| MB_ICONQUESTION)!= IDYES) return; 
   CloseAll(); 
   } 

Fechar o roteiro na íntegra.

// Скрипт. Закрыть все.mq4 -----------------------------------
#property copyright "herurg@bk.ru" 
#include <WinUser32.mqh> 

void start() 
   { 
   if(MessageBox("Закрыть (удалить) все ордера?",
   "Скрипт", MB_YESNO| MB_ICONQUESTION)!= IDYES) return; 
   CloseAll(); 
   } 

void CloseAll() 
{ 
   for (int i=OrdersTotal()-1; i>=0; i--) 
      { 
      if (OrderSelect( i, SELECT_BY_POS, MODE_TRADES)==false) break; 
      if (OrderType()==OP_BUY      ) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),100); 
      if (OrderType()==OP_SELL     ) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),100); 
      if (OrderType()==OP_BUYSTOP  ) OrderDelete(OrderTicket()); 
      if (OrderType()==OP_SELLSTOP ) OrderDelete(OrderTicket()); 
      if (OrderType()==OP_BUYLIMIT ) OrderDelete(OrderTicket()); 
      if (OrderType()==OP_SELLLIMIT) OrderDelete(OrderTicket()); 
      }  
}
 

Kim, você é o melhor. Eu tiro meu chapéu para você.

Estudei todas as suas funções, mas há um engate, ou engate. Agora, quando eu escrevo funções, eu as escrevo do meu cérebro, mas suas funções estão na minha cabeça :-).

Tenho estudado muitas de suas funções desde o início de minha carreira de programação.

Obrigado.

 
gince >> :

Por favor, ajude-me a fechar um pedido em qualquer condição que você goste e ele simplesmente não funciona.

Obrigado de antemão

Explicação

Qualquer estratégia para fechar um pedido não é importante Por favor, ajude a fechar um pedido usando as funções da Kim


int start()
{
  //----
  //Print (ExpertName);
  if(Bars<20) return(0);
  if ( CheckNevBar)
  if (! NevBar()) return(0);
   
  TradesInThisSymbol = ExistPositions( sy);
  if( TradesInThisSymbol > 0) return(0);
   
  if(AccountFreeMargin() < MarginMin) 
  {
  //Print("Not enough money to trade Strategy:", ExpertName);
  return(0);
  }
  sy=Symbol();
  Lots = GetSizeLot( sy, LotsWayChoice, LotsPercent, LotsDeltaDepo, LotsDepoForOne, LotsMax);
   
   
  if ( CheckForOpen_Sell())
  OpenPosition( sy, OP_SELL, Lots);           // Тут  работает
  if ( CheckForOpen_Buy())
  OpenPosition( sy, OP_BUY, Lots);            // Тут  работает
  
  if( CheckForClose_Buy())
  ClosePositions( sy, OP_BUY);                 // Тут  у меня что то неработает
  if( CheckForClose_Sell())  
  ClosePositions( sy, OP_SELL);               // Тут  у меня что то неработает
  
  //----
  return(0);
}

//------------------------

bool CheckForClose_Buy()
  {
  Indicat_Var();
  if ( ExistPositions( sy, OP_BUY, MagicNumber))
  {
  if( VininI_fast_trend == -1)return(true);   // Тут любое условие на закрытие
  //if(BB_MACD_2 > 0)return(true);           // Тут любое условие на закрытие
  else
  return(false);
  }  
  }
//------------------------
bool CheckForClose_Sell()
  {
  Indicat_Var();
  if ( NumberOfPositions( sy, OP_SELL, MagicNumber) >0)
  {
  if( VininI_fast_trend == 1)return(true);         // Тут любое условие на закрытие
  //if(BB_MACD_1 > 0)                             // Тут любое условие на закрытие
  //return(true);
  else
  return(false);  
  }
  }
 
Há algo que não funciona aqui, o que significa que não fecha, sem erros.
Razão: