[ARCHIV] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 3. - Seite 548

 
harvest:
Meine Herren, könnten Sie mir ein Beispiel für die Funktion geben, die eine offene Position zum Breakeven bewegt (Arbeit auf Tick), mein Expert Advisor hat ein Schleppnetz, der Beginn dieses Schleppnetzes ist erst nach der Funktion des Rollover zu kaufen. Ich danke Ihnen im Voraus.


Siehe den Trailer - die Bibliothek der Schleppnetze von Yury Dzyuban - insbesondere, wie er die Frage löst, ob das Schleppnetz nur vom Gewinn aus ausgeführt wird, d.h., wenn der Wert der Variablen trlinloss = false ist, ob das Schleppnetz im Verlustbereich ausgeführt wird. Bearbeiten Sie Ihre Schleppnetzfunktion entsprechend diesem Beispiel, und das war's.

Dateien:
 

Freunde, könnt ihr mir sagen, warum der klassische Martin nicht funktioniert? Es öffnet nur Angebote zum Kaufen!!! Seit einem Monat spiele ich nun schon damit herum - null Emotionen! Im Strategy Tester funktioniert es gut, aber nicht in der Demo. Eine weitere interessante Sache - wenn ich T/S und T/P 1000 einstelle, öffnet er sich nur bei Buy, und wenn ich 200 einstelle, bei Buy und Sell... Mann, wo ist der Unterschied?

Hier ist der Code: Bitte um Hilfe

//+------------------------------------------------------------------+ 
//| StMartin.mq4 | 
//| Sergey Kodolov | 
//| 84232676421@mail.ru | 
//+------------------------------------------------------------------+ 
#property copyright "Sergey Kodolov" 
#property link "84232676421@mail.ru" 

    extern int TP = 1000; 
    extern int TS = 1000; 
    extern double lots = 0.1; 

    double volumz; 
    int total,ticket; 
    int slip = 3; 
    int Magic = 7; 

 


//+------------------------------------------------------------------+ 
//| expert initialization function | 
//+------------------------------------------------------------------+ 
int init() 
  { 
//---- 

   ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,slip,Bid-TS*Point,Bid+TP*Point,"First order",Magic,0,Yellow); //открываем первый ордер 
 
//---- 
   return(0); 
  } 
//+------------------------------------------------------------------+ 
//| expert deinitialization function | 
//+------------------------------------------------------------------+ 
int deinit() 
  { 
//---- 

//---- 
   return(0); 
  } 
//+------------------------------------------------------------------+ 
//| expert start function | 
//+------------------------------------------------------------------+ 
int start() 
  { 
//---- 



OrderOpenFunction(); 

//---- 
   return(0); 
  } 
//+------------------------------------------------------------------+ 

void OrderOpenFunction()
{
   total = OrdersTotal();
   if(total < 1) 
   { 
      OrderSelect(0,SELECT_BY_POS,MODE_HISTORY); 
      volumz = OrderLots(); 
      if(OrderProfit()<0) 
      { 
         if(OrderType() == OP_BUY) 
         { 
            double lot1 = volumz*2; 
            ticket = OrderSend(Symbol(),OP_SELL,lot1,Bid,slip,Ask+TS*Point,Ask-TP*Point,0,Magic,0,Red); 
         } 
         if(OrderType() == OP_SELL) 
         { 
            double lot2 = volumz*2; 
            ticket = OrderSend(Symbol(),OP_BUY,lot2,Ask,slip,Bid-TS*Point,Bid+TP*Point,0,Magic,0,Green); 
         } 
      } 
      if(OrderProfit()>0) 
      { 
         if(OrderType() == OP_BUY) 
         { 
            ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,slip,Bid-TS*Point,Bid+TP*Point,0,Magic,0,Green); 
         } 
         if(OrderType() == OP_SELL) 
         { 
            ticket = OrderSend(Symbol(),OP_SELL,lots,Bid,slip,Ask+TS*Point,Ask-TP*Point,0,Magic,0,Red); 
         } 
      } 
   } 
}      
  
 
Alp:

Dann wird es noch unklarer. Angenommen, ich kaufe einen Euro für 1 000 000 (1k) Dollar (Broker multipliziert dies mit 100, so dass das Geschäft für 100k geht) Chart springt 100 Punkte nach oben und sofort verkaufen sie und ich bin auf der Plus-Seite für 10 000 Dollar gut dort Broker Provision und Spread als Ergebnis 6000 $ netto in meiner Tasche. (Nun, es ist klar, dass er nach dem Verkauf wieder um 100 Punkte fallen wird.) Das ist Unsinn!!!! Vielleicht fällt es doch noch auf den Boden? Andernfalls würden sehr große Akteure Milliarden verdienen, ohne etwas zu tun.


Dann weiß ich es nicht...

Im Allgemeinen ist es wohl so, dass man für eine spürbare Kursbewegung einen sehr großen Betrag kaufen oder verkaufen muss, SEHR groß. Bei solchen Beträgen ist die Hebelwirkung nicht 1/200, wie bei mir, sondern 1/2 im übertragenen Sinne. Nun, das ist nur meine persönliche Meinung. Ich kann so einen Blödsinn schreiben...

 
Es gibt eine Sache, die mich überrascht. Ich habe den Code hier früher gepostet, es gab einen Fehler, es half mir, ihn zu beheben, Sepulca half, dank ihr, bis jetzt der Code alles funktioniert... Aber ich verstehe das Rätsel immer noch nicht: In der ersten Schleife wählte der Auftragsselektor einen Auftrag aus, es gab keinen Fehler, und dann, als ich denselben Auftrag in einer anderen Zeile unten auswählte, zeigte der Auftragsselektor einen Fehler? Wenn Sie können, schauen Sie es sich an, ich bin einfach neugierig.
for(  i=0;i<=OrdersHistoryTotal();i++){
    OrderSelect(i ,SELECT_BY_POS,MODE_HISTORY);
     if (OrderMagicNumber( )== magic) { if(OrderSymbol()== Symbol()) {





 current = OrderOpenTime();  Alert ( " current = OrderOpenTime(); ",  current);Alert ( " max ", max );
      
      if (current > max) 
      {                    
         max = current;      
         ticket = OrderTicket();   Alert ( " ticket = OrderTicket();  ", ticket );
      }}}}


       if (ticket>-1){
      OrderSelect( ticket,SELECT_BY_TICKET,MODE_HISTORY);Alert ("SELL Select error HISTORYticket ", GetLastError( )  ) ;
Dimka-novitsek:

Niemals! Warum nicht? Zum Zeitpunkt der Überschreitung gab es keine offenen Aufträge! Vielleicht verstehe ich das nicht.

Der Suchzyklus ist ebenfalls Geschichte! Dort weise ich sie der Variablen int ticket zu!

Und es schwört, Entschuldigung, 2012.02.04 11:28:47 2011.12.06 16:35 GMT EURUSD,M30: Alert: SELL Select Fehler HISTORYticket 4105

Wenn es von MODE_HISTORY zu MODE_TRADES?

Und das Wichtigste ist, dass ich denselben Auftrag in der Historie mit Hilfe von order select auswähle, und er ist zuerst ausgewählt, sonst könnte ich nicht damit arbeiten! Es gibt keine Logik!!!!!! Ich bin schockiert.


 
Können Sie mir sagen, wo ich einen solchen EA oder ein Skript finden kann... Es gibt eine Gruppe von Aufträgen (9-11) auf beiden Seiten des Preises in einem Abstand von 5-7 Pips von ihm platziert. die Zeit, um sie auszulösen ist streng begrenzt. daher sehr oft die Aufträge nicht bekommen, gefangen und sie werden entfernt. Aufträge werden in den frühen Morgenstunden platziert, in der Regel ist der Markt stark flach. ich möchte die zweite Gruppe von Aufträgen nach dem Preis zu bewegen, wie es eine der Auftragsgruppen nähert. einfach ausgedrückt, ein Pending Order Trail mit tp und sld. ist dies möglich? vielen Dank im Voraus.
 

Ich brauche Hilfe!

Ich habe den folgenden Block in meinem EA (Event Counter):

if (isCloseLastPosByStop()==True) //Wenn der letzte Auftrag durch Stop geschlossen wurde

{
N=N+1;
Alert(N, "Elch");
} sonst N=0;

FRAGE: Wie kann ich die Daten in eine Datei (Excel) schreiben, anstatt sie auf dem Bildschirm anzuzeigen?

 

Guten Tag.

Bitte geben Sie an, warum die Pfeile nicht gezeichnet werden, Code:

ObjectCreate("miniDown", OBJ_ARROW, 0, Time[1], Open[1]);
ObjectSet("miniDown", OBJPROP_ARROWCODE, 241);
ObjectSet("miniDown", OBJPROP_COLOR, Gelb);

 

Angenommen, EURUSD=1,44757, GBPUSD=1,63366, Sie wollen, dass sie nahe beieinander liegen.

Lassen Sie mich das erklären:

a=GBPUSD/EURUSD=1,12855336874901 ungefähr 1,12855 ,

d.h. wenn ich eine Währung kaufen/verkaufen möchte, so dass der Wert des Geschäfts ungefähr gleich ist, dann

Ich muss EURUSD*akaufen/verkaufen , aber es gibt kein solches Los, also ist meine Frage, wie man es implementiert, Losberechnung?

Ich habe nicht so viel, also ist meine Frage: Wie funktioniert das?

 
T-G:
Ich möchte die Funktion zur Berechnung des maximal zulässigen Loses unter Berücksichtigung der offenen Positionen, d.h. unter Verwendung des Eigenkapitals, mit anderen teilen. Die Standardfunktion berechnet das Risiko, aber wenn ich Geschäfte habe, habe ich nicht genug Geld, um sie zu öffnen

Ich habe es für einen benutzerdefinierten EA geschrieben:

//+----------------------------------------------------------------------------+
double CorrectLots(double lt, int Part=2) {
   double ltcorr, Money, MoneyCorr;
   double dig      = MarketInfo(Symbol(),MODE_DIGITS);
   double MaxLot   = MarketInfo(Symbol(),MODE_MAXLOT);
   double MinLot   = MarketInfo(Symbol(),MODE_MINLOT);
   double StpLot   = MarketInfo(Symbol(),MODE_LOTSTEP);
   double OneLot   = MarketInfo(Symbol(),MODE_MARGINREQUIRED);
   double TradeMrg = NormalizeDouble(AccountFreeMargin()/Part,dig);    // Свободные средства, разрешенные к торговле
   
   lt=MathAbs(lt);
   ltcorr=lt;                                      // Зададим начальное значением ltcorr равным значению lt
   if (lt>=MaxLot) ltcorr=MaxLot;                  // Проверим превышение допустимых ...
   if (lt<=MinLot) ltcorr=MinLot;                  // ... значений лота
   Money=lt*OneLot;                                // Вычисляем стоимость открываемой позы
   if (Money<TradeMrg) return(ltcorr);             // Если свободных средств больше, чем цена позиции -  возвращаем неизменённый лот
   else if (Money>=TradeMrg) {                     // Если цена позиции равна или больше, чем есть свободных средств, то ...
      ltcorr=MathAbs(MathFloor(TradeMrg/OneLot/StpLot)*StpLot);         // ... рассчитаем допустимый лот
      MoneyCorr=ltcorr*OneLot;                      
      Print("Func CorrectLots: лот ",lt," скорректирован до ",DoubleToStr(ltcorr,2),
            " Стоимость до корректировки = ",DoubleToStr(Money,dig),
            " Стоимость после корректировки = ",DoubleToStr(MoneyCorr,dig)
            ); 
      return(ltcorr);                                                   // ... и вернём его значение
      }
   Print("Func CorrectLots: лот вернули без изменений");
   return(ltcorr);                                 // Возврат изначального лота в непредусмотренных случаях с сообщением
}
//+----------------------------------------------------------------------------+

Um das Lot zu korrigieren, müssen Sie die Funktion aufrufen, indem Sie als Parameter lt das Lot angeben, das Sie für die Eröffnung einer Position verwenden möchten, und anstelle des Parameters Part die Zahl, durch die die im Handel verwendeten freien Mittel geteilt werden sollen. D.h. um nur die Hälfte der freien Mittel zu handeln, sollte Part einen Wert von 2 haben, wenn ein Drittel, dann 3, ein Viertel - 4, usw.

double Lot=CorrectLots(0.1, 2);

Nach dem Aufruf der Funktion fügen Sie Lot als Parameter in die Funktion OrderSend() ein;

Die Funktion begrenzt die Lots in einem EA mit einem harten Martin und verhindert, dass Lots verloren gehen. Aber auch die Rentabilität war rückläufig...

 
Antwort auf meinen vorherigen Beitrag, ich verstehe nicht, was da falsch ist =(