Fonctions utiles de KimIV - page 87

 
keekkenen писал(а) >>

Non, cela ne fonctionne pas... un ordre - un lot, si vous avez ouvert un ordre avec 3 lots, vous ne pouvez pas diviser le lot comme vous le souhaitez - d'abord 1, puis 1 et ensuite 1 - l'ordre ferme le lot entier, c'est-à-dire que l'ordre se ferme avec le même lot qu'il a été ouvert, vous ne pouvez pas fermer les ordres en partie...

vous vous trompez j'ai un trall qui ferme l'ordre en parties.

 

pas de nouvelles commandes bien sûr ?

 
keekkenen 17.07.2009 15:48
hope писал(а) >> pas la même. Un tiers du lot est fermé (selon l'une des conditions - disons que le prix a atteint +150 points). Le deuxième tiers fermera, disons, lorsque +300pts de l'ouverture, etc.

Non, ça ne fonctionne pas comme ça... un ordre - un lot, si vous ouvrez un ordre avec 3 lots, vous ne pouvez pas diviser le lot de quelque façon que ce soit - d'abord 1, puis 1 et ensuite 1 de plus - l'ordre ferme le lot entier, c'est-à-dire que l'ordre se ferme avec le lot avec lequel il a été ouvert, vous ne pouvez pas fermer les ordres au coup par coup...

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

".... vous ne pouvez pas diviser la commande en lots..." - pourquoi ? Techniquement, elle a été implémentée il y a longtemps, et grâce à Roger et KimIV à la p.85 l'erreur des 131 lots normalisés a été évitée. En outre, l'affirmation "...un ordre, un lot, et si vous ouvrez un ordre avec 3 lots, alors vous ne pouvez pas le diviser comme vous le souhaitez : d'abord 1, puis 1..." est incorrecte : un ordre, tout comme un lot, est constitué du volume : 0.03, 0.3, 3... et est tranquillement fermé par des parties : 0.01, 0.1, 1... n'est-ce pas ?

 

Et l'objet de ma dernière demande était le suivant : est-il possible de clôturer TOUTES les positions sans avoir recours à des tableaux, mais en utilisant des calculs standard et en les additionnant comme suit

   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

J'ai l'impression d'être un navire fatigué qui a navigué sur l'océan en espérant qu'un phare me dise s'il faut continuer dans cette direction ou faire demi-tour et essayer un autre chemin...

Igor - est-ce qu'on détruit votre branche pour rien ?

 

Vous pouvez fermer une seule paire à la fois, mais des paires différentes, par ex :

1,2,1,2,2,1,2 volume total superposé 1-2-1+2+2+1+2=3 lots

En résumant, on obtient l'achat-été de 3 lots et on met le compteur de ce volume en vente de 3 lots.

et ensuite nous fermons le bi de fermeture.

*

Mais pour répondre à la question : est-il possible de fermer toutes les positions ?

oui c'est possible, l'un après l'autre, avec un script c'est rapide, aap !

Les scripts eux-mêmes ou les fonctions de fermeture ont été publiés plus d'une fois...

Et en les paramétrant, vous pouvez les fermer tous en même temps et par critères, par exemple :

- par un symbole spécifique

- seulement bai ou seulement vendre

- seulement rentable

En conséquence, des combinaisons de critères sont possibles...

 

Aidez-nous à fermer l'ordre à n 'importe quelle condition et cela ne fonctionne tout simplement pas.

Merci d'avance

Dossiers :
help.rar  7 kb
 

Couvre tout ! !!

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

Ne fermera que les poses ouvertes.

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

Exemple d'appel.

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

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

Fermer le script dans son intégralité.

// Скрипт. Закрыть все.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, tu es la meilleure. Je vous tire mon chapeau.

J'ai étudié toutes vos fonctions, mais il y a un hic, ou hic. Maintenant, quand j'écris des fonctions, je les écris depuis mon cerveau, mais vos fonctions sont dans ma tête :-).

J'ai étudié plusieurs de vos fonctions depuis le tout début de ma carrière de programmeur.

Merci.

 
gince >> :

Aidez-moi à fermer un ordre à n 'importe quelle condition et cela ne fonctionne pas.

Merci d'avance

Explication

Toute stratégie de fermeture d'un ordre n'est pas importante Veuillez aider à fermer un ordre en utilisant les fonctions 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);  
  }
  }
 
Il y a quelque chose qui ne fonctionne pas ici, ce qui signifie qu'il ne se ferme pas. Aucune erreur.