Caratteristiche utili da KimIV - pagina 87

 
keekkenen писал(а) >>

No, non funzionerà... un ordine - un lotto, se hai aperto un ordine con 3 lotti allora non puoi dividere il lotto come vuoi - prima 1, poi 1 e poi 1 - l'ordine chiude l'intero lotto, cioè l'ordine chiude con lo stesso lotto con cui è stato aperto, non puoi chiudere gli ordini in parti...

ti stai sbagliando ho un trall che si chiude molto in parti

 

nessun nuovo ordine ovviamente?

 
keekkenen 17.07.2009 15:48
hope писал(а) >> non è lo stesso. Un terzo del lotto è chiuso (secondo una delle condizioni - diciamo che il prezzo ha raggiunto +150 punti). Il secondo terzo si chiuderà, diciamo, quando +300pts dall'apertura, ecc.

No, non funziona così... un ordine - un lotto, se apri un ordine con 3 lotti allora non puoi dividere il lotto in nessun modo - prima 1, poi 1 e poi ancora 1 - l'ordine chiude l'intero lotto, cioè l'ordine si chiude con il lotto con cui è stato aperto, non puoi chiudere ordini in parti...

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

".... non puoi dividere l'ordine in lotti..." - perché? Tecnicamente, è stato implementato molto tempo fa, e grazie a Roger e KimIV a p.85 l'errore di 131 lotti normalizzati è stato evitato. Inoltre, l'affermazione "...un ordine, un lotto, e se apri un ordine con 3 lotti, allora non puoi dividerlo come vuoi: prima 1, poi 1..." non è corretta: un ordine, così come un lotto, consiste nel volume: 0,03, 0,3, 3... ed è tranquillamente chiuso per parti: 0,01, 0,1, 1... giusto?

 

E il punto della mia ultima richiesta era questo: è possibile chiudere TUTTE le posizioni senza ricorrere agli array, ma usando calcoli standard e sommandoli come

   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

Ho solo la sensazione di una nave stanca che ha navigato l'oceano sperando in un faro che mi dica se è necessario navigare in questa direzione o se è il caso di girarsi e provare un'altra strada...

Igor - stiamo distruggendo il tuo ramo per niente?

 

Potete chiudere tutte una coppia alla volta, ma coppie diverse, per esempio

1,2,1,2,2,2,1,2 volume totale sovrapposto 1-2-1+2+2+1+2=3 lotti

Riassumendo, otteniamo il buy-summer 3 lotti e impostare il contatore di questo volume vendere 3 lotti

e poi chiudiamo il bi di chiusura.

*

Ma per rispondere alla domanda: è possibile chiudere tutte le posizioni?

Sì, è possibile, uno dopo l'altro, con uno script è veloce, aap!

Gli stessi script o le funzioni di chiusura sono stati pubblicati più di una volta...

E impostandoli si possono chiudere sia tutti insieme che per criteri, per esempio:

- da un simbolo specifico

- solo bai o solo vendere

- solo redditizio

Corrispondentemente, sono possibili combinazioni di criteri...

 

Aiutate a chiudere l'ordine a qualsiasi condizione e semplicemente non funziona.

Grazie in anticipo

File:
help.rar  7 kb
 

Coprirà tutto!!!

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

Chiuderà solo le pose aperte.

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

Esempio di chiamata.

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

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

Chiudere lo script per intero.

// Скрипт. Закрыть все.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 sei la migliore. Tanto di cappello.

Ho studiato tutte le vostre funzioni, ma c'è un intoppo, o intoppo. Ora, quando scrivo funzioni, le scrivo dal mio cervello, ma le vostre funzioni sono nella mia testa :-).

Ho studiato molte delle vostre funzioni fin dall'inizio della mia carriera di programmatore.

Grazie.

 
gince >> :

Per favore, aiutatemi a chiudere un ordine a qualsiasi condizione e semplicemente non funziona.

Grazie in anticipo

Spiegazione

Qualsiasi strategia per chiudere un ordine non è importante Per favore aiutatemi a chiudere un ordine usando le funzioni di 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);  
  }
  }
 
C'è qualcosa che non funziona qui, il che significa che non si chiude, nessun errore.