Funciones útiles de KimIV - página 87

 
keekkenen писал(а) >>

No, eso no funcionará... una orden - un lote, si has abierto una orden con 3 lotes entonces no puedes dividir el lote como quieres - primero 1, luego 1 y luego 1 - la orden cierra todo el lote, es decir, la orden se cierra con el mismo lote con el que se abrió, no puedes cerrar órdenes por partes...

te equivocas tengo un trall que se cierra mucho en partes

 

¿nada de nuevos pedidos, por supuesto?

 
keekkenen 17.07.2009 15:48
hope писал(а) >> No es lo mismo. Un tercio del lote está cerrado (según una de las condiciones - digamos que el precio alcanzó +150 puntos). El segundo tercio se cerrará, digamos, cuando haya +300pts desde la apertura, etc.

No, no funciona así... una orden - un lote, si abres una orden con 3 lotes entonces no puedes dividir el lote de ninguna manera - primero 1, luego 1 y luego 1 más - la orden cierra todo el lote, es decir, la orden se cierra con el lote con el que se abrió, no puedes cerrar órdenes por partes...

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

".... no puede dividir el pedido en lotes..." - ¿por qué? Técnicamente, se implementó hace tiempo, y gracias a Roger y KimIV en la p.85 se evitó el error de 131 lotes normalizados. Además, la afirmación "...una orden, un lote, y si abres una orden con 3 lotes, entonces no puedes dividirla como quieras: primero 1, luego 1..." es incorrecta: una orden, además de un lote, se compone del volumen: 0,03, 0,3, 3... y se cierra tranquilamente por partes: 0,01, 0,1, 1... ¿no?

 

Y el sentido de mi última petición era el siguiente: ¿es posible cerrar TODAS las posiciones sin recurrir a las matrices, sino utilizando cálculos estándar y sumando 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

Tengo la sensación de un barco cansado que ha surcado el océano esperando que un faro me diga si es necesario navegar en esta dirección o dar la vuelta e intentar otro camino...

Igor, ¿hemos destrozado tu rama para nada?

 

Se puede cerrar todo un par a la vez, pero diferentes pares, por ejemplo

1,2,1,2,2,1,2 volumen total superpuesto 1-2-1+2+2+1+2=3 lotes

Resumiendo, obtenemos la compra-verano de 3 lotes y ponemos el contador de este volumen de venta de 3 lotes

y luego cerramos el Close bi.

*

Pero para responder a la pregunta: ¿es posible cerrar todas las posiciones?

¡sí es posible, uno tras otro, es rápido con el guión, aap!

Los propios guiones o las funciones de cierre se han publicado más de una vez...

Y al configurarlos puedes cerrarlos todos a la vez y por criterios, por ejemplo

- por un símbolo específico

- sólo bai o sólo vender

- sólo es rentable

En consecuencia, son posibles combinaciones de criterios...

 

Por favor, ayude a cerrar la orden en cualquier condición que desee y simplemente no funciona.

Gracias de antemano

Archivos adjuntos:
help.rar  7 kb
 

¡¡Cubrirá todo!!

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ólo cerrará las poses abiertas.

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); 
      } 
}

Ejemplo de llamada.

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

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

Cierre del guión en su totalidad.

// Скрипт. Закрыть все.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, eres la mejor. Me quito el sombrero.

He estudiado todas sus funciones, pero hay una pega, o un obstáculo. Ahora, cuando escribo funciones, las escribo desde mi cerebro, pero tus funciones están en mi cabeza :-).

He estudiado muchas de sus funciones desde el principio de mi carrera de programación.

Gracias.

 
gince >> :

Por favor, ayúdame a cerrar un pedido en las condiciones que quieras y no funciona.

Gracias de antemano

Explicación

Cualquier estrategia para cerrar una orden no es importante Por favor ayude a cerrar una orden usando las funciones de 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);  
  }
  }
 
Hay algo que no funciona aquí, lo que significa que no se cierra. No hay errores.
Razón de la queja: