Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4973
Beiträge: 43258
Benutzer: 7.219
Aktive Benutzer: 81
Links: 84
Wir begrüßen unseren neuesten Benutzer: Hopfen&Malz
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor einem Tag
- Hopfen&Mal...
vor 2 Tagen
- frankmicha...
vor einer Woche
- DFeck
vor einer Woche
- bb1107
vor 2 Wochen
- rg-trader

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 252
Gesamt: 252
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Like Tree2Likes
Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 17.04.20
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.178
MA-EA befindet sich auf einem aufstrebenden Ast
Standard Hedge EA

Hallo.

Ich glaube, jetzt braucht das Teil wirklich nen eigenes Thema.

Hab, wie gesagt, eine Art Hedge-EA am Testen. Siehe Anhang. Soll ständig im selben WP gleichzeitig Long und Short investiert sein. Sobald die Order einer Richtung geschlossen wurde, weil sie durch den SL oder TP ging, soll sofort die nächste Order in die selbe Richtung geöffnet werden. Das klappt im Gegensatz zu vorherigen Versionen auch einigermaßen gut. Leider aber anscheinend nur vormittags. Bei einigen WP hat er heute nur bis 9 oder 10 Uhr geöffnet und danach irgendwie gar nix mehr gemacht. Oder lag das vielleicht doch an zu hohen Spreads? Er durfte nen max Spr. von 20 akzeptieren.

2. hab ich was eingebaut, was den OrderProfit() der letzten geschlossenen Order auslesen soll. Wenn der >0.0 war, soll zu den Lots ein einstellbarer Wert dazu addiert werden. Er hat sie zwar auch erhöht, aber absolut nicht so, wie er sollte. Er sollte um 0.01 jedes mal erhöhen, wenn die letzte Order Gewinn gemacht hat. Er hat aber irgendwie jedes Mal mehrere ganze Lots dazu gerechnet! Flippt das Ding total aus oder was?

Die Beschreibung ist vielleicht nicht so einfach zu verstehen, aber Fehler sind ja eigentlich keine im Code oder doch?
Code:
extern double LotsBuy=0.01;
extern double LotsSel=0.01;

extern string esLPOCP1="Lots Buy/Sell";
extern string esLPOCP2="+ LotsPlus";
extern string esLPOCP3="if Order close";
extern string esLPOCP4="with Profit";

extern double LotsPlus=0.01;

extern string esOLLPOLP1="OrderLots of";
extern string esOLLPOLP2="last Profit Order";
extern string esOLLPOLP3="+ LotsPlus?";

extern bool OLPO_LP=false; // Zum Testen aus
Code:
 //=============================================================================================================
// O R D E R   L O T S   E R H Ö H E N
//=============================================================================================================


if(OrderSelect(TiBuy,SELECT_BY_TICKET,MODE_HISTORY)){

  if(OrderProfit()>0.0){

    if(OLPO_LP==false)LotsBuy = LotsBuy + LotsPlus;
    
    if(OLPO_LP==true)LotsBuy = OrderLots() + LotsPlus;}

}



  if(OrderSelect(TiSel,SELECT_BY_TICKET,MODE_HISTORY)){

  if(OrderProfit()>0.0){

    if(OLPO_LP==false)LotsSel = LotsSel + LotsPlus;
  
    if(OLPO_LP==true)LotsBuy = OrderLots() + LotsPlus;}

}
Angehängte Dateien
Dateityp: mq4 LoSh_AlwInv_SLTP_LP.mq4 (20,8 KB, 2x aufgerufen)
  #2 (permalink)  
Alt 20.04.20
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.178
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Hallo.

Warum spielen die Lots verrückt und warum öffnet er nur ein paar Mal Orders wie er soll und tut dann anscheinend gar nix mehr?
Angehängte Dateien
Dateityp: mq4 LoSh_AlwInv_SLTP_LP.mq4 (19,3 KB, 3x aufgerufen)
  #3 (permalink)  
Alt 24.04.20
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.178
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Hat/te Jemand nen Demo-Konto bei ActivTrades? Ganz egal, wie ich den EA schreibe, es gibt immer wieder lange Pausen beim Order öffnen. Aber so richtig kann er ja nur funktionieren, wenn er ständig Long und Short im selben WP ist. Ich kanns mir eigentlich nur noch so erklären, dass ActivTrades doch irgendwelche Begrenzungen hat, was das Hedgen und Scalpen angeht.

Oder gibts doch irgendwelche Fehler im Code? Irgendwas, was zwar nicht wirklich falsch ist, aber eben trotzdem dafür sorgt, dass der EA nicht so läuft, wie er soll?
Code:
//=============================================================================================================
// P R O P E R T Y
//============================================================================================================*/
// #property strict
// #property strict sorgt anscheinend dafür, dass Kommentare im Konfig-Fenster im MT4 sichtbar sind.

#property copyright"LoSh_AlwInv_SLTP_LP.mq4"
#property copyright"daniel-rudloff@web.de"
//=============================================================================================================
// B E S C H R E I B U N G
//=============================================================================================================
extern string TOY="true = on / yes";
extern string FON="false = off / no";
//=============================================================================================================
// E I N S T E L L U N G E N
//=============================================================================================================

extern string MN="Magic Numbers";
extern int Buy_MN=2;
extern int Sell_MN=4;

//-----------------------------------------------------------------------------------------------------------*/

extern string OOO1="Open Orders Only";
extern string OOO2="from/till?";
extern string OOO3="(Server Time)";

input bool Open_Only_From_Till=true; //

extern int Open_From_Hour=7;
extern int Open_From_Min=0;

extern int Open_Till_Hour=17;
extern int Open_Till_Min=26; //

//-----------------------------------------------------------------------------------------------------------*/

extern string IOOFTF1="if";
extern string IOOFTF2="Open_Only_From_Till = false";
extern string IOOFTF3="Close_all_Orders_after";
extern string IOOFTF4="= false too";

extern string CAOTOC1="Close all Orders after";
extern string CAOTOC2="(Server Time)";

extern bool Close_all_Orders_after=true;

extern int Close_after_Hour=17;
extern int Close_after_Min=27;

//-----------------------------------------------------------------------------------------------------------*/

extern int Slippage=99999999;

//-----------------------------------------------------------------------------------------------------------*/


extern double LotsBuy=0.01;
extern double LotsSel=0.01;


extern string esLPOCP1="Lots Buy/Sell";
extern string esLPOCP2="+ LotsPlus";
extern string esLPOCP3="if Order close";
extern string esLPOCP4="with Profit";

extern double LotsPlus=0.01;


extern string esOLLPOLP1="OrderLots of";
extern string esOLLPOLP2="last Profit Order";
extern string esOLLPOLP3="+ LotsPlus?";

extern bool OLPO_LP=false; // Zum Testen aus


//-----------------------------------------------------------------------------------------------------------*/

extern int SL=1600; // 1600 testen

//-----------------------------------------------------------------------------------------------------------*/

extern int TP=50; // Zum Testen 50

//=============================================================================================================
// D E K L A R A T I O N E N
//=============================================================================================================

bool OMbuy,OMsel,OCbuy,OCsel;

double Buy_SL,Sel_SL,Buy_TP,Sel_TP;

int i,j,TiBuy,TiSel;

//=============================================================================================================
// I N I T / D E I N I T
//=============================================================================================================
int OnInit(){
  return(0);}
void OnDeinit(const int reason){
  return;}
//=============================================================================================================
// E A   F U N K T I O N E N   S T A R T
//=============================================================================================================
int start(){
//=============================================================================================================
// O P E N   T I M E
//=============================================================================================================


bool RT=false; // RT = Right Time
if( (Open_Only_From_Till==false) || (Open_Only_From_Till==true&&Hour()>=Open_From_Hour&&Minute()>=Open_From_Min&&Hour()<=Open_Till_Hour&&Minute()<=Open_Till_Min) )RT=true;


//=============================================================================================================
// L O T S
//=============================================================================================================


double Min_L=MarketInfo(Symbol(),MODE_MINLOT);
double Max_L=MarketInfo(Symbol(),MODE_MAXLOT);

if(LotsBuy<Min_L)LotsBuy=Min_L;
if(LotsSel<Min_L)LotsSel=Min_L;

if(LotsBuy>Max_L)LotsBuy=Max_L;
if(LotsSel>Max_L)LotsSel=Max_L;


//=============================================================================================================
// S T O P   L O S S
//=============================================================================================================


//SL auf 0 stellen, wenn oben <1,
//um irgendwelche Missverständnisse zu vermeiden.
if(SL<1){
  Buy_SL=0.0;
  Sel_SL=0.0;}

  else{
    Buy_SL=NormalizeDouble(Ask-SL*_Point,_Digits);
    Sel_SL=NormalizeDouble(Bid+SL*_Point,_Digits);}

//SL genauso groß wie Minstoplevels machen, wenn er kleiner ist:
double MSL=MarketInfo(Symbol(),MODE_STOPLEVEL);
if(Buy_SL<MSL)Buy_SL=MSL;
if(Sel_SL<MSL)Sel_SL=MSL;


//=============================================================================================================
// T A K E   P R O F I T
//=============================================================================================================


//TP auf 0 stellen, wenn oben <1,
//um irgendwelche Missverständnisse zu vermeiden.
if(TP<1){
  Buy_TP=0.0;
  Sel_TP=0.0;}

  else{
    Buy_TP=NormalizeDouble(Ask+TP*_Point,_Digits);
    Sel_TP=NormalizeDouble(Bid-TP*_Point,_Digits);}


//=============================================================================================================
// P R U E F E N   O B   O R D E R S   G E O E F F N E T   S I N D
//=============================================================================================================


bool BuyInv=false;
bool SelInv=false;


for(i=OrdersTotal()-1;i>=0;i--){
  if(OrderSelect(i,SELECT_BY_POS)){
    if(OrderType()==OP_BUY&&OrderMagicNumber()==Buy_MN&&OrderSymbol()==Symbol())BuyInv=true;
    if(OrderType()==OP_SELL&&OrderMagicNumber()==Sell_MN&&OrderSymbol()==Symbol())SelInv=true;}}


//=============================================================================================================
// O P E N   O R D E R S
//=============================================================================================================


if( RT==true ){


  if( BuyInv==false && IsTradeAllowed()==true ){
  
    TiBuy=OrderSend(Symbol(),OP_BUY,LotsBuy,Ask,Slippage,Buy_SL,Buy_TP,NULL,Buy_MN,0,Blue);
    
    return(TiBuy);}



  if( SelInv==false && IsTradeAllowed()==true ){
  
    TiSel=OrderSend(Symbol(),OP_SELL,LotsSel,Bid,Slippage,Sel_SL,Sel_TP,NULL,Sell_MN,0,Red);
    
    return(TiSel);}

}


//=============================================================================================================
// O R D E R   L O T S   E R H Ö H E N
//=============================================================================================================


if(OrderSelect(TiBuy,SELECT_BY_TICKET,MODE_HISTORY)){


  if(OrderProfit()>0.0){


    if(OLPO_LP==false)LotsBuy = LotsBuy + LotsPlus;
    
    if(OLPO_LP==true)LotsBuy = OrderLots() + LotsPlus;}

}




if(OrderSelect(TiSel,SELECT_BY_TICKET,MODE_HISTORY)){


  if(OrderProfit()>0.0){


    if(OLPO_LP==false)LotsSel = LotsSel + LotsPlus;
  
    if(OLPO_LP==true)LotsSel = OrderLots() + LotsPlus;}

}


//=============================================================================================================
// C L O S E   O R D E R S
//=============================================================================================================


for(j=OrdersTotal()-1;j>=0;j--){
  if(OrderSelect(j,SELECT_BY_POS)){


    if(OrderType()==OP_BUY&&OrderMagicNumber()==Buy_MN&&OrderSymbol()==Symbol()){
      
      if(Close_all_Orders_after==true&&Hour()>=Close_after_Hour&&Minute()>=Close_after_Min){
      
        if(IsTradeAllowed()==true)OCbuy=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Black);}}



    if(OrderType()==OP_SELL&&OrderMagicNumber()==Sell_MN&&OrderSymbol()==Symbol()){
      
      if(Close_all_Orders_after==true&&Hour()>=Close_after_Hour&&Minute()>=Close_after_Min){

        if(IsTradeAllowed()==true)OCsel=OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Orange);}}

}}


//=============================================================================================================
// E A   F U N K T I O N E N   B E E N D E N
//=============================================================================================================
return(0);}
Angehängte Dateien
Dateityp: mq4 LoSh_AlwInv_SLTP_LP.mq4 (19,3 KB, 2x aufgerufen)
  #4 (permalink)  
Alt 24.04.20
Mitglied
 
Registriert seit: Dec 2015
Beiträge: 85
TogoTiger befindet sich auf einem aufstrebenden Ast
Standard

So genau habe ich jetzt deinen Code nicht analysiert. Aber du solltest dir mal überlegen, wann genau dein Programm was machen muss. Deine Funktion für Lotserhöhung kann so, wie du das programmiert hast, mehrmals für die gleiche Order aufgerufen werden. Mach mal Prints in dein Programm und guck dir das an.

Mach das doch genau nur dann, wenn du feststellst, dass deine Buy oder Sell-Order in TP oder SL gelaufen ist.
Jetzt kann bei bei jedem Tick Lotserhöhung aufgerufen werden, wenn Orderopen nicht ausgeführt wurde, aus welchem Grund auch immer.

Meine Programme prüfen bei jedem OrderSend, ob alles richtig abgelaufen ist und wiederholen dann den Befehl, wenn nötig. Und das bis zu einer einzustellenden Anzahl Wiederholungen. Und wenns nicht geht, dann schau ich dafür, dass nicht bei jedem Tick etwas gemacht wird, das ich nicht will.

Ich habe z.B. auch sowas drin vor der OrdeEröffnung

while(IsTradeContextBusy())
Sleep(10);

Du machst auch bei jedem Tick Dinge, die unnötig sind, z.B. Min Lotsize, TP und SL einstellen
  #5 (permalink)  
Alt 25.04.20
Mitglied
 
Registriert seit: Dec 2015
Beiträge: 85
TogoTiger befindet sich auf einem aufstrebenden Ast
Standard

Noch ein Rat:
Bau sowas in deinen Code ein:


Code:
#include <stderror.mqh>
#include <stdlib.mqh>

int      Fehlercode;
string   Fehlerbeschreibung;
string   Fehlerausgabe;

// nach OrderSend oder OrderClose oder wann du willst:

      if(TiBuy == -1)
      {
         Fehlercode = GetLastError();
         Fehlerbeschreibung = ErrorDescription(Fehlercode);
         Fehlerausgabe = StringConcatenate("Eröffnung Kauf-Order:",Fehlercode,": ",Fehlerbeschreibung);
         Print(Fehlerausgabe);
      }
Ich habe deinen Code mit dem DAX ausprobiert, und es ist wirklich so, dass Lotserhöhung mehrmals aufgerufen wird. Damit kann, wenn das oft passiert, Lotsize bis rieisg gross erhöht werden.
Aber ganz genau weiss ich auch nicht, wann das passiert. Dein Code ist nicht so programmiert, dass er sicher läuft, wenn Fehler passieren. Da musst du schon selber suchen. Wenn du Prints in dein Programm einbaust, sieht du in der Console ja, wann was abläuft.
Es gibt genügend Beispiele im Netz, wie man sicheren Code programmiert und wie man Fehler abfängt. Merk dir: Errorhandling ist etwas vom Wichtigsten bei sauberer Programmierung. Und du machst da genau nichts.
Leopold likes this.

Geändert von TogoTiger (25.04.20 um 10:19 Uhr)
  #6 (permalink)  
Alt 26.04.20
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.178
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Ich vermute, dass die Lots verrückt spielen, weil sie in der selben Anweisung erst abgefragt und im nächsten Schritt verändert werden... In C++ könnte man das vielleicht als ne Art Überladen bezeichnen.

Aber selbst wenn man das mit extra Variablen hin bekommen sollte, ist das Kernproblem des EA, dass er nicht ständig im Markt ist wie er soll, sondern immer wieder lange Pausen macht...
Angehängte Dateien
Dateityp: mq4 LoSh_AlwInv_SLTP_LP.mq4 (19,3 KB, 0x aufgerufen)
  #7 (permalink)  
Alt 27.04.20
Mitglied
 
Registriert seit: Dec 2015
Beiträge: 85
TogoTiger befindet sich auf einem aufstrebenden Ast
Standard

Nein, deine Vermutung mit 'Ueberlagerung' ist totaler Blödsinn.
Der Fehler liegt da:
if(OrderSelect(TiBuy,SELECT_BY_TICKET,MODE_HISTORY))

MODE_HISTORY geht nur bei SELECT_BY_POS

Steht auch so in der Doku:

pool=MODE_TRADES

[in] Optional order pool index. Used when the selected parameter is SELECT_BY_POS. It can be any of the following values:

MODE_TRADES (default)- order selected from trading pool(opened and pending orders),
MODE_HISTORY - order selected from history pool (closed and canceled order).


So wie du jetzt abfragst, wird Lotsize bei jedem Tick erhöht, sobald OrderProfit > 0 ist.

Auch wenn du das korrigierst, wird Lotsize nie erhöht, weil deine Ticketnummer jeweils die aktuelle TicketNr ist, nicht die der letzten Order. Du musst das dann machen, wenn du feststellst, dass deine Order in den TP gelaufen ist, nicht nachdem du eine neue Order eröffnet hast. Wie du das genau machst, musst jetzt aber selber herausfinden. Ich habe wenig Lust, dir diesen EA so zu programmieren, dass er läuft. Zumal die Strategie eh nicht funktioniert.

Ich habs soeben nochmals laufen lassen, diesmal mit EURUSD. Er ist immer im Markt drin, aber natürlich nur mit Lotsize 0.01.

Hast du eingebaut, was ich dir empfohlen habe? Mach doch mal ein paar Print ins Porgramm. Oder weisst du ev. nicht, wie man solche Prints sieht:
Ansicht / Terminal, dann unten Experten anklicken und dann siehst du schön, was abläuft, auch, warum er keine Order eröffnet.

So läufts jedenfalls, und es macht auch immer Orders auf.
Wenn du den Experten startest, macht er beim ersten Tick BuyOrder auf, beim zweiten Tick SellOrder. Willst du das so?
Nochmals: Ueberleg dir genau, was du wann machen willst, und mach nicht bei jedem Tick Dinge, die du nicht willst und Anderes nicht, was du gerne möchtest. Kleiner Tip: nach return(TiBuy); gehts erst beim nächsten Tick weiter.

Code:
//=============================================================================================================
// O P E N   O R D E R S
//=============================================================================================================


if( RT==true ){


  if( BuyInv==false && IsTradeAllowed()==true )
  {

   while(IsTradeContextBusy())
         Sleep(10);
  
    TiBuy=OrderSend(Symbol(),OP_BUY,LotsBuy,Ask,Slippage,Buy_SL,Buy_TP,NULL,Buy_MN,0,Blue);
    Print ("Open buy ",TiBuy," LotsBuy: ",LotsBuy);

      if(TiBuy == -1)
        {
         Fehlercode = GetLastError();
         Fehlerbeschreibung = ErrorDescription(Fehlercode);
         Fehlerausgabe = StringConcatenate("Eröffnung Kauf-Order:",Fehlercode,": ",Fehlerbeschreibung);
         Print(Fehlerausgabe);
        }

    return(TiBuy);
  }


  if( SelInv==false && IsTradeAllowed()==true )
  {
  
   while(IsTradeContextBusy())
         Sleep(10);

    TiSel=OrderSend(Symbol(),OP_SELL,LotsSel,Bid,Slippage,Sel_SL,Sel_TP,NULL,Sell_MN,0,Red);
    Print ("Open Sell ",TiSel," LotsSel: ",LotsSel);

      if(TiSel == -1)
        {
         Fehlercode = GetLastError();
         Fehlerbeschreibung = ErrorDescription(Fehlercode);
         Fehlerausgabe = StringConcatenate("Eröffnung Kauf-Order:",Fehlercode,": ",Fehlerbeschreibung);
         Print(Fehlerausgabe);
        }

   return(TiSel);
  }

}


//=============================================================================================================
// O R D E R   L O T S   E R H Ö H E N
//=============================================================================================================


if(OrderSelect(TiBuy,SELECT_BY_POS,MODE_HISTORY)){


  if(OrderProfit()>0.0){

    if(OLPO_LP==false)LotsBuy = LotsBuy + LotsPlus;
    
    if(OLPO_LP==true)LotsBuy = OrderLots() + LotsPlus;}
    Print ("LotsBuy erhöhen ", TiBuy," OrdeerProfit: ",DoubleToString(OrderProfit(),2)," LotBuy: ",LotsBuy);

}

if(OrderSelect(TiSel,SELECT_BY_POS,MODE_HISTORY)){


  if(OrderProfit()>0.0){


    if(OLPO_LP==false)LotsSel = LotsSel + LotsPlus;
  
    if(OLPO_LP==true)LotsSel = OrderLots() + LotsPlus;}
    Print ("LotsSel erhöhen ",TiSel," OrdeerProfit: ",DoubleToString(OrderProfit(),2)," LotsSel: ",LotsSel);

}
Warum deine Strategie nur Verluste bringt, haben wir schon vor etrwa 2 Jahren diskutiert. Das lassen wir diesmal lieber bleiben.
  #8 (permalink)  
Alt 27.04.20
Mitglied
 
Registriert seit: Dec 2015
Beiträge: 85
TogoTiger befindet sich auf einem aufstrebenden Ast
Standard

Du fragst OrderHistory total falsch ab.

So etwa gehts nämlich, und du machst die Abfrage in der History nur 1 x pro Order:

Code:
int LastBuy = 0;
int LastSel = 0;
int History_index = 0;
int LastHistory_index = 0;
.
.
.

//========================================================
// P R U E F E N   O B   O R D E R S   G E O E F F N E T   S I N D
//=============================================================================================================


bool BuyInv=false;
bool SelInv=false;

for(i=OrdersTotal()-1;i>=0;i--)
{
   if(OrderSelect(i,SELECT_BY_POS))
   {
      if(OrderType()==OP_BUY &&OrderMagicNumber()==Buy_MN &&OrderSymbol()==Symbol()) BuyInv=true;
      if(OrderType()==OP_SELL&&OrderMagicNumber()==Sell_MN&&OrderSymbol()==Symbol()) SelInv=true;
   }
}


//------------------------------
// OrderLots für Buy erhöhen
//----------------------------

History_index = OrdersHistoryTotal();
if (LastHistory_index != History_index)
{
   if (LastBuy > 0)
   {
      //Print ("Gewinn LastBuy fragen: ",LastBuy);
      for(i=History_index;i>=0;i--)
      {
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
         {
            if(OrderTicket() == LastBuy)
            {
               Print ("OrderProfit LastBy: ",LastBuy," ",DoubleToString(OrderProfit(),2));
               if (OrderProfit()>0.0)
               {
                  if(OLPO_LP==false)LotsBuy = LotsBuy + LotsPlus;    
                  if(OLPO_LP==true)LotsBuy = OrderLots() + LotsPlus;
               }
               Print ("LotBuy: ",LotsBuy); 
               LastBuy = 0;
            }
         }
      }
   }
// --------------------------
// OrderLots für Sell erhöhen
// --------------------------
   if (LastSel > 0)
   {
      //Print ("Gewinn LastSeL fragen: ",LastSel);
      for(i=History_index;i>=0;i--)
      {
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
         {
            if(OrderTicket() == LastSel)
            {
               Print ("OrderProfit LastSel: ",LastSel," ",DoubleToString(OrderProfit(),2));
               if (OrderProfit()>0.0)
               {
                  if(OLPO_LP==false)LotsSel = LotsSel + LotsPlus;
                  if(OLPO_LP==true)LotsSel = OrderLots() + LotsPlus;
               }
               Print (" LotsSel: ",LotsSel);
               LastSel = 0;
            }
         }
      }
   }
}
LastHistory_index = History_index;

//=============================================================================================================
// O P E N   O R D E R S
//=============================================================================================================
.
.
.
  #9 (permalink)  
Alt 27.04.20
Mitglied
 
Registriert seit: Dec 2015
Beiträge: 85
TogoTiger befindet sich auf einem aufstrebenden Ast
Standard

Ich habe noch was vergessen, in die Antwort einzufügen. Int LastBuy und LastSel musst natürlich nach Order Eröffnung füllen, z.B. so:

Code:
//=============================================================================================================
// O P E N   O R D E R S
//=============================================================================================================


if( RT==true )
{
   if( BuyInv==false && IsTradeAllowed()==true )
   {
      while(IsTradeContextBusy())
         Sleep(10);
      TiBuy=OrderSend(Symbol(),OP_BUY,LotsBuy,Ask,Slippage,Buy_SL,Buy_TP,NULL,Buy_MN,0,Blue);
     // Print ("Open buy ",TiBuy," LotsBuy: ",LotsBuy);

      if(TiBuy == -1)
      {
         Fehlercode = GetLastError();
         Fehlerbeschreibung = ErrorDescription(Fehlercode);
         Fehlerausgabe = StringConcatenate("Eröffnung Kauf-Order:",Fehlercode,": ",Fehlerbeschreibung);
         Print(Fehlerausgabe);
      }
      LastBuy = TiBuy;
      return(TiBuy);
   }

   if( SelInv==false && IsTradeAllowed()==true )
   {
      while(IsTradeContextBusy()) Sleep(10);
     
      TiSel=OrderSend(Symbol(),OP_SELL,LotsSel,Bid,Slippage,Sel_SL,Sel_TP,NULL,Sell_MN,0,Red);
      // Print ("Open Sell ",TiSel," LotsSel: ",LotsSel);

      if(TiSel == -1)
      {
         Fehlercode = GetLastError();
         Fehlerbeschreibung = ErrorDescription(Fehlercode);
         Fehlerausgabe = StringConcatenate("Eröffnung Kauf-Order:",Fehlercode,": ",Fehlerbeschreibung);
         Print(Fehlerausgabe);
      }
      LastSel = TiSel;
      return(TiSel);
   }
  #10 (permalink)  
Alt 29.04.20
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.178
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Hallo.

Mit den ganzen Fehlermeldungen muss ich mich noch mal beschäftigen.

Code:
if( IsTradeContextBusy()==true )Sleep(Sl_MS);
oder
Code:
while( IsTradeContextBusy()==true )Sleep(Sl_MS);
Sl_MS kann man in den Globalen Variablen eintragen.

Wie wählt man die zuletzt geschlossene Order aus? Überall steht was Anderes. Wie gesagt soll, wenn die letzte geschlossene Order Gewinn gemacht hat, die Lots in die jeweilige Richtung erhöht werden. Also wenn z.B. der letzte Buy mit 0.1 Lot mit Gewinn geschlossen wurde, soll der nächste Buy z.B. um 0.1 Lot erhöht, also mit 0.2 Lot raus geschickt werden. Wenn der wieder Gewinn macht, soll der Buy danach wieder um 0.1 Lot auf 0.3 Lot erhöht werden und immer so weiter. Muss beim Index oder bei dieser Nummer nun 0 oder j oder was sonst eingetragen werden, um rauszufinden, ob die letzte Order in eine Richtung Gewinn gemacht hat?
Code:
//=============================================================================================================
// O R D E R   L O T S   E R H Ö H E N
//=============================================================================================================


for(int j=OrdersTotal()-1;i>=0;i--){
  if(OrderSelect(0,SELECT_BY_POS,MODE_HISTORY)){


    if(OrderType()==OP_BUY&&OrderMagicNumber()==Buy_MN&&OrderSymbol()==Symbol() && OrderCloseTime()!=0 ){

      if(OrderProfit()>0.0)LotsBuy = LotsPlus + last_L_Buy;}


    if(OrderType()==OP_SELL&&OrderMagicNumber()==Sell_MN&&OrderSymbol()==Symbol() && OrderCloseTime()!=0 ){

      if(OrderProfit()>0.0)LotsSel = LotsPlus + last_L_Sel;}


}}
Angehängte Dateien
Dateityp: mq4 LoSh_AlwInv_SLTP_LP.mq4 (19,4 KB, 2x aufgerufen)

Geändert von MA-EA (29.04.20 um 00:36 Uhr)
Thema geschlossen

Lesezeichen

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +1. Es ist jetzt 14:32 Uhr.





Suchmaschine - Reisen - Wavesnode - Facebook Forum - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------