Nützliche Funktionen von KimIV - Seite 87

 
keekkenen писал(а) >>

Nein, das wird nicht funktionieren... ein Auftrag - ein Lot, wenn Sie einen Auftrag mit 3 Lots eröffnet haben, dann können Sie das Lot nicht so aufteilen, wie Sie wollen - erst 1, dann 1 und dann 1 - der Auftrag schließt das gesamte Lot, d.h. der Auftrag schließt mit demselben Lot, mit dem er eröffnet wurde, Sie können Aufträge nicht in Teilen schließen...

Sie irren sich, ich habe einen Trall, der sich in Teilen schließt

 

natürlich keine neuen Aufträge?

 
keekkenen 17.07.2009 15:48
hope писал(а) >> nicht dasselbe. Ein Drittel des Loses wird geschlossen (gemäß einer der Bedingungen - sagen wir, der Preis erreichte +150 Punkte). Das zweite Drittel wird z.B. geschlossen, wenn +300 Punkte von der Eröffnung entfernt sind, usw..

Nein, so funktioniert das nicht... ein Auftrag - ein Lot, wenn Sie einen Auftrag mit 3 Lots eröffnen, dann können Sie das Lot nicht in irgendeiner Weise aufteilen - erst 1, dann 1 und dann noch 1 - der Auftrag schließt das ganze Lot, d.h. der Auftrag schließt mit dem Lot, mit dem er eröffnet wurde, Sie können Aufträge nicht stückweise schließen...

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

".... Sie können den Auftrag nicht in Lose aufteilen..." - warum? Technisch gesehen wurde sie schon vor langer Zeit eingeführt, und dank Roger und KimIV auf S. 85 wurde der Fehler von 131 normalisierten Partien vermieden. Außerdem ist die Aussage "...eine Order, ein Lot, und wenn Sie eine Order mit 3 Lots eröffnen, dann können Sie sie nicht beliebig aufteilen: erst 1, dann 1..." falsch: eine Order besteht ebenso wie ein Lot aus dem Volumen: 0,03, 0,3, 3... und wird stillschweigend durch Teile geschlossen: 0,01, 0,1, 1... richtig?

 

Und der Punkt meiner letzten Anfrage war folgender: Ist es möglich, ALLE Positionen zu schließen, ohne auf Arrays zurückzugreifen, sondern Standardberechnungen zu verwenden und sie zu addieren wie

   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

Ich fühle mich wie ein müdes Schiff, das den Ozean befahren hat und auf einen Leuchtturm hofft, der mir sagt, ob es notwendig ist, in diese Richtung zu segeln oder umzudrehen und einen anderen Weg zu versuchen ...

Igor - machen wir deinen Zweig umsonst kaputt?

 

Sie können alle Paare auf einmal schließen, aber verschiedene Paare, z. B:

1,2,1,2,2,1,2 überlappende Gesamtmenge 1-2-1+2+2+1+2=3 Lose

Zusammenfassend erhalten wir den Kauf-Sommer 3 Lose und setzen den Zähler dieser Menge verkaufen 3 Lose

und dann schließen wir die Close bi.

*

Aber um die Frage zu beantworten: Ist es möglich, alle Positionen zu schließen?

ja, das ist möglich, eins nach dem anderen, mit einem Skript geht es schnell, aap!

Die Skripte selbst oder die abschließenden Funktionen wurden mehr als einmal veröffentlicht...

Und wenn Sie sie einrichten, können Sie sowohl alle auf einmal als auch nach Kriterien schließen, z. B.:

- durch ein bestimmtes Symbol

- nur bai oder nur verkaufen

- nur profitabel

Dementsprechend sind Kombinationen von Kriterien möglich...

 

Bitte helfen Sie, den Auftrag zu einem beliebigen Zeitpunkt abzuschließen , und es funktioniert einfach nicht.

Ich danke Ihnen im Voraus

Dateien:
help.rar  7 kb
 

Es wird alles abgedeckt!!!

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

Es werden nur die offenen Posen geschlossen.

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

Beispielanruf.

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

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

Skript vollständig schließen.

// Скрипт. Закрыть все.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, du bist die Beste. Ich ziehe meinen Hut vor Ihnen.

Ich habe alle Ihre Funktionen studiert, aber es gibt einen Haken, oder ein Problem. Nun, wenn ich Funktionen schreibe, schreibe ich sie aus meinem Kopf heraus, aber Ihre Funktionen sind in meinem Kopf :-).

Ich habe viele Ihrer Funktionen seit den Anfängen meiner Programmierkarriere studiert.

Ich danke Ihnen.

 
gince >> :

Bitte helfen Sie mir, einen Auftrag zu einer beliebigen Bedingung zu schließen, und es funktioniert einfach nicht.

Vielen Dank im Voraus

Erläuterung

Jede Strategie zum Schließen eines Auftrags ist unwichtig Bitte helfen Sie beim Schließen eines Auftrags mit Kims Funktionen


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);  
  }
  }
 
Irgendetwas funktioniert hier nicht, d.h. es wird nicht geschlossen. Keine Fehler.