Frage für Kenner - Seite 8

 

Guten Tag. In der "Sensation! Eine profitable Strategie ist gefunden!

Rid hatheute Morgen einen EA gepostet. Ich habe es heruntergeladen, ein wenig optimiert und ausgeführt.

Es funktioniert auf einem Demokonto (Dax) ohne Probleme (mt4 brok-trade).

Ich habe es mit einem echten Konto getestet. Startlos=0,01 oder 0,1.

Das funktioniert nicht! Protokoll gibt Fehler zurück

2009.06.12 15:17:26 HlopMaster FDAXM9,M1: Ungültige Losgröße für OrderSend-Funktion

2009.06.12 15:17:26 HlopMaster FDAXM9,M1: OrderSend()- Fehler OP_SELLSTOP. op 5087,50000000 sl 0,00000000 tp 0,00000000 4051

//------------------------------------------------------------------

Ich kann nicht verstehen, warum.

Die Höhe der Kaution ermöglicht es Ihnen, ein bestimmtes Los mit einer Reserve zu versehen. Im Code des Expert Advisors gibt es keine Einschränkungen für das reale Konto.

Wo liegt also das Problem? Bitte um Rat!


 

Hier ist der Quellcode.

...!!!!!!!!!!!!!!!!!! .........!!!!!!!!!!!!!!!!!

Das frage ich mich. Wann werden die Einschränkungen für den Code aufgehoben? Warum kann ich nicht in einem offenen Fenster den gesamten Code eines EAs in einem spezialisierten Forum posten?

Die Antwort, die ich anstelle von "READY LARGE TEXT SIZE" erhalte, funktioniert zu gut.

Es sieht so aus, als ob MQ von "Kosaken" eines Konkurrenten besetzt ist, die alles tun, um die Besucher zu verwirren und sie davon abzuhalten, hier die richtigen Fragen zu stellen.



Dateien:
hlopmaster.mq4  11 kb
 

Hier sind die Teile des Codes, die für die Berechnung der Lose verantwortlich sind:

//------------------------------------------------
double GetMaxLot()// Функция возвращает максимальный обьем 
//открытой позиции.  
{int i;double maxlot;
   for( i=1; i<=OrdersTotal(); i++)         
   {
      if(OrderSelect( i-1, SELECT_BY_POS)==true) 
       {                                   
           if((OrderType()==OP_BUY ||OrderType()==OP_SELL)  && OrderSymbol()==Symbol()
          && maxlot<OrderLots()){ maxlot=OrderLots();}
       }
    }   
return( maxlot);
}
//-----------------------------------------------
double GetMaxLotOrder()
//Функция возвращает максимальный обьем установленных
// стоп ордеров. 
{int i;double maxlot;
   for( i=1; i<=OrdersTotal(); i++)         
   {
      if(OrderSelect( i-1, SELECT_BY_POS)==true) 
       {                                   
           if((OrderType()==OP_BUYSTOP ||OrderType()==OP_SELLSTOP)  &&
           OrderSymbol()==Symbol() && maxlot<OrderLots())
           { maxlot=OrderLots();}
       }
    }   
return( maxlot);
}
//----------------------------------------------
int GetLastTypePos(){
   int i;datetime dt;int type;
      for( i=1; i<=OrdersTotal(); i++)         
      {
         if(OrderSelect( i-1, SELECT_BY_POS)==true) 
          {                                   
              if((OrderType()==OP_BUY ||OrderType()==OP_SELL)  && OrderSymbol()==Symbol() 
              && dt<OrderOpenTime())
              { dt=OrderOpenTime(); type=OrderType();}
          }
       }   
   return( type);
}
//-----------------------------------------------
int DopOrder(double Lots)
{
int type= GetLastTypePos();
   if( type==1){
     op=Bid+ pips*Point;if( SL>0){ sl=Bid;}else{ sl=0;}if( TP>0){ tp= op+ TP*Point;}else{ tp=0;}
     err=OrderSend(Symbol(),OP_BUYSTOP, Lots,NormalizeDouble( op,Digits),3,NormalizeDouble( sl,Digits),
NormalizeDouble( tp,Digits),"FORTRADER.RU",0,0,Red);
     if( err<0){Print("OrderSend()-  Ошибка OP_BUYSTOP. 
                op "+ op+" sl "+ sl+" tp "+ tp+" "+GetLastError());return(-1);}
   }
   if( type==0){
      op=Ask- pips*Point;if( SL>0){ sl=Ask;}else{ sl=0;}if( TP>0){ tp= op- TP*Point;}else{ tp=0;}
      err=OrderSend(Symbol(),OP_SELLSTOP, Lots,NormalizeDouble( op,Digits),3,NormalizeDouble( sl,Digits),
NormalizeDouble( tp,Digits),"FORTRADER.RU",0,0,Red);
      if( err<0){Print("OrderSend()-  Ошибка OP_SELLSTOP. 
                   op "+ op+" sl "+ sl+" tp "+ tp+" "+GetLastError());return(-1);}
   }
return(0);
}
//-------------------------------------------------
int CloseAllPos(int type)
{  int buy=1; int sell=1;
int i, b=0;int ordertiket;
 
 if( type==1)
   {
   while( buy==1)
     {
        buy=0;
        for( i=0; i<OrdersTotal(); i++)
         {
           if(true==OrderSelect( i, SELECT_BY_POS, MODE_TRADES))
           {
           if(OrderType()==OP_BUY && OrderSymbol()==Symbol() ){ buy=1; 
                                  OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);}
           }else{ buy=0;}
         }  
         if( buy==0){return(0);}
      } 
   }
   
   if( type==0)
   {
      while( sell==1)
     {
        sell=0;
        for( i=0; i<OrdersTotal(); i++)
         {
           if(true==OrderSelect( i, SELECT_BY_POS, MODE_TRADES))
           {
           if(OrderType()==OP_SELL && OrderSymbol()==Symbol() ){ sell=1;
                                 OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); }
           }else{ sell=0;}
         }  
         
        if( sell==0){return(0);}
      } 
     }
   return(0);
   }
//--------------------------------------------------------


 
Rita писал(а) >>

Hier sind die Teile des Codes, die die Lose berechnen:

Der Expert Advisor ist nicht dafür ausgelegt, auf einem echten Konto zu arbeiten. Wenn es mindestens eine offene Position auf anderen Symbolen gibt, dann ist die Arbeitslogik unterbrochen. Natürlich kann sie korrigiert werden, aber ich zum Beispiel sehe nicht viel Sinn darin, dies zu tun.

 
Ich danke Ihnen. Warum wird dann ein so seltsamer Fehler zurückgegeben?
 
Rita писал(а) >>
>> Danke. Und warum wird dann ein so seltsamer Fehler zurückgegeben?

Der Fehler tritt höchstwahrscheinlich auf

   if(OrdersTotal()<1){ err= OpenNewOrders();}
   if(OrdersTotal()>0){ TrailStopOrders();}

beim Aufruf von TrailStopOrders();

Da es bereits Aufträge für andere Symbole gibt. In diesem Fall wird der EA überhaupt nicht geöffnet.

Wir müssen jedoch die Logik berücksichtigen.

Es scheint, dass der Fehler an anderer Stelle auftritt. Aber ich werde nicht in der Lage sein, sie zu überprüfen. Ich habe keine offenen Stellen.

Ich kann es nur in meinem Kopf überprüfen. Und dafür muss mein EA mir gehören.

 
Wissen Sie, ob es im MT4 ein System gibt, mit dem man den Gewinn oder Verlust von Pips bei den heutigen Geschäften bestimmen kann?
 

Es ist nicht ganz klar, was Sie genau wollen. Schauen Sie sich dieses Design an.

http://www.kimiv.ru/index.php?option=com_remository&Itemid=13&func=fileinfo&id=45

 
Rita, ich danke dir!
 

Guten Abend. Es ist ein großes Problem entstanden. Nicht wirklich zum Thema. Und sehr schlechtes Timing.

Gestern Abend erhielt ich einen unverständlichen Link in meinem ICQ, den ich achtlos anklickte.

Danach fror mein Computer ein und es erschien ein Fenster mit dem Vorschlag, eine SMS zu senden.

Ich habe den Computer ein paar Mal neu gestartet, und nach 45-50 Minuten wurde er entsperrt.

Aber jetzt komme ich nicht mehr an meine WM-Brieftasche heran.

Erfordert eine Art Zugangscode für den Schlüssel. (Die Datei selbst ist der Schlüssel).

Ich weiß nicht, was ich tun soll. Wer-knib. war in einer ähnlichen sititsiyu ?