Thema: buy sell ea
Einzelnen Beitrag anzeigen
  #9 (permalink)  
Alt 01.10.20
Martin Martin ist offline
Mitglied
 
Registriert seit: Mar 2013
Beiträge: 123
Martin befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von MA-EA Beitrag anzeigen
EA ist im Anhang.

Hab ich mir heut noch mal kurz angeschaut. Scheint gar nicht so zu sein, dass er nur wegen dem Broker "Pause" macht. Sondern dass da grundsätzlich was nicht richtig ist. Liegt vielleicht nur am Drecks-MT4, bei dem irgendwie gar nichts funktioniert, wie es soll. Die Entwickler von dem Schrott sollte man verklagen. Da funktionieren die einfachsten Sachen nicht.

Wie auch immer, mal funktioniert der EA, mal nicht. Als ich heute immer wieder den EA in die Chart-Fenster gezogen habe, da hat er dann Orders geöffnet, wie er soll. Aber irgendwie nur dann. Vorher hat er irgendwie 20 Min lang gar nix gemacht. Da muss irgendwas Grundsätzliches grundlegend grundverkehrt sein.

Meine letzte Hoffnung ist, dass es irgendwie an property strict liegt, dass ich normalerweise aus habe. Aber wer weiß, was damit wieder für Probleme kommen.

Hier noch mal der komplette Code. Wer den Fehler findet, wegen dem das Ding mal Orders öffnet wie es soll und mal nicht, kann ihn mir mit allergrößtem Vergnügen in meine dumme Fresse drücken. Viel Spaß.

Code:
/*=============================================================================================================
// N O T I Z E N   U N D   I N F O S
//=============================================================================================================

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


Öffnen der Orders dauert allgemein etwas lange.

Lag vielleicht an Dist? Mit SL und TP getestet.
Auch mit SL und TP dauert das Öffnen neuer Orders
teilweise sehr lange.


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


Der EA ist nicht profitabel,
weil mit immer höheren Lots
auch immer höhere Spread-Kosten
entstehen. Pro 0.01 Lot entstehen
bis zu ungefähr 15 Pips Spread.
Diese müssen natürlich wieder
rein geholt werden.


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


Für das Schließen aller Orders
zur eingestellten Zeit wird
extra Bereich am Ende des EA genutzt.


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





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



//=============================================================================================================
// 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_Dist_v4"
#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 esMN="Magic Numbers";
extern int MN_Sel=12;
extern int MN_Buy=34;

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

extern string esMOBSC1="Max Orders";
extern string esMOBSC2="Sell / Buy";
extern string esMOBSC3="concurrently";

extern int MOBSC_Def=0; // Default Wert

extern int MOBSC_Sel=0; // Start-Werte.
extern int MOBSC_Buy=0; // Werden gleich nach OrderSend mit "++" erhöht.

extern int MOBSC_Max_Sel=2; // 2 bis
extern int MOBSC_Max_Buy=2; // 3 ?

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

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

extern int Open_From_Hour=5; // Zum Testen ab 5 Uhr Orders öffnen lassen.
extern int Open_From_Min=0;

extern int Open_Till_Hour=14; // Zum Testen bis kurz vor 15 Uhr
extern int Open_Till_Min=56;  // Orders öffnen lassen.

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

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

extern bool Close_all_Orders_after=false; // Zum Testen aus.

extern int Close_Hour=17;
extern int Close_Min=27;

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

extern int Slippage=99999999;

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


extern double Def_Lots=0.01;

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

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

extern double LotsPlus=0.01; // Zum Testen 0.02 ? Erst mal nicht.


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

extern int SL=2400; // 2400 testen

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

extern int TP=2800; // Zum Testen 2800

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

extern string esIITCBSMS1="if IsTradeContexBusy()";
extern string esIITCBSMS2="sleep Milli Seconds";

extern int Sl_MS=15; // Zum Testen 15 MS

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

extern string esDOPtAB1="Distance to";
extern string esDOPtAB2="Order Open Price";
extern string esDOPtAB3="close Win-Order.";
extern string esDOPtAB4="If close with Profit";
extern string esDOPtAB5="Lots Buy + Lots Sel /";
extern string esDOPtAB6="Lots Sel + Lots Buy.";

extern int Dist = 75; // Zum Testen 75. Weniger als 50 ist wahrscheinlich nicht ausreichend?

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

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



int

i
,
j
,
k
,
l
,
m
,
n


;



//=============================================================================================================
// I N I T / D E I N I T ?
//=============================================================================================================

int OnInit(){}


/*
int deinit(){}
*/

//=============================================================================================================
// E A   F U N K T I O N E N   S T A R T
//=============================================================================================================int 
void OnTick(){
//=============================================================================================================
// L O T S   ?
//=============================================================================================================


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

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

if(LotsSel>=Max_L){
  LotsSel=Max_L;
  LotsPlus=0.0;}
  
if(LotsBuy>=Max_L){
  LotsBuy=Max_L;
  LotsPlus=0.0;}


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


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

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

//SL genauso groß wie Minstoplevels machen, wenn er kleiner ist:
double MSL=MarketInfo(Symbol(),MODE_STOPLEVEL);
if(SL_Sel<MSL)SL_Sel=MSL;
if(SL_Buy<MSL)SL_Buy=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){
  double TP_Sel=0.0;
  double TP_Buy=0.0;}

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


//=============================================================================================================
// C L O S E   D I S T A N C E   B E R E C H N U N G
//=============================================================================================================



double CLsel_D = NormalizeDouble( Ask + Dist *_Point,_Digits);


double CLbuy_D = NormalizeDouble( Bid - Dist *_Point,_Digits);



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


if(Hour()>=Open_From_Hour&&Minute()>=Open_From_Min){


  if((Hour()<=Open_Till_Hour&&Minute()<=Open_Till_Min)|| ( MOBSC_Sel>MOBSC_Def && Hour()>=Open_Till_Hour && Minute()>=Open_Till_Min ) || ( MOBSC_Buy>MOBSC_Def && Hour()>=Open_Till_Hour&&Minute()>=Open_Till_Min ) ){


// <= oder < ?
// < , sonst wird auch geöffnet, wenn Max bereits erreicht ist.
    if( MOBSC_Sel<MOBSC_Max_Sel && MOBSC_Buy<MOBSC_Max_Buy ){


//////////////////////////////////////////////////////////////////////////////////////////////////////////////
      bool SH=false;
      bool LO=false;
      for(i=OrdersTotal()-1;i>=0;i--){
        if(OrderSelect(i,SELECT_BY_POS)){
          if(OrderSymbol()==Symbol()){
            if(OrderMagicNumber()==MN_Sel)SH=true;
            if(OrderMagicNumber()==MN_Buy)LO=true;}}}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////


      if(SH==false){
        if(IsTradeAllowed()==true)OrderSend(Symbol(),OP_SELL,LotsSel,Bid,Slippage,SL_Sel,TP_Sel,NULL,MN_Sel,Blue);
        if(IsTradeContextBusy()==true)Sleep(Sl_MS);
        MOBSC_Sel++;}


      if(LO==false){
        if(IsTradeAllowed()==true)OrderSend(Symbol(),OP_BUY,LotsBuy,Ask,Slippage,SL_Buy,TP_Buy,NULL,MN_Buy,Blue);
        if(IsTradeContextBusy()==true)Sleep(Sl_MS);
        MOBSC_Buy++;}

} } }


//=============================================================================================================
// O R D E R   C L O S E   B Y   D I S T   ?
//=============================================================================================================


for(j=OrdersTotal()-1;j>=0;j--){
  if(OrderSelect(j,SELECT_BY_POS)){
    if(OrderSymbol()==Symbol()){
      if(OrderMagicNumber()==MN_Sel){
        if( CLsel_D < OrderOpenPrice() ){
          if(IsTradeAllowed()==true)OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Red);
          if(IsTradeContextBusy()==true)Sleep(Sl_MS);
          LotsSel = OrderLots() + LotsPlus;


          if(MOBSC_Sel>=MOBSC_Max_Sel){
            for(k=OrdersTotal()-1;k>=0;k--){
              if(OrderSelect(k,SELECT_BY_POS)){
                if(OrderSymbol()==Symbol()){
                  if(OrderMagicNumber()==MN_Buy){
                    if(IsTradeAllowed()==true)OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Red);
                    if(IsTradeContextBusy()==true)Sleep(Sl_MS);
                    MOBSC_Sel=MOBSC_Def;
                    MOBSC_Buy=MOBSC_Def;
                    LotsSel=Def_Lots;
                    LotsBuy=Def_Lots;

} } } } } } } } } }


//////////////////////////////////////////////////////////////////////////////////////////////////////////////


//Die eigentliche Buy-Order auswählen:
for(l=OrdersTotal()-1;l>=0;l--){
  if(OrderSelect(l,SELECT_BY_POS)){
    if(OrderSymbol()==Symbol()){
      if(OrderMagicNumber()==MN_Buy){
        if( CLbuy_D > OrderOpenPrice() ){
          if(IsTradeAllowed()==true)OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Red);
          if(IsTradeContextBusy()==true)Sleep(Sl_MS);
          LotsBuy = OrderLots() + LotsPlus;


          if(MOBSC_Buy>=MOBSC_Max_Buy){
            for(m=OrdersTotal()-1;m>=0;m--){
              if(OrderSelect(m,SELECT_BY_POS)){
                if(OrderSymbol()==Symbol()){
                  if(OrderMagicNumber()==MN_Sel){
                    if(IsTradeAllowed()==true)OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Red);
                    if(IsTradeContextBusy()==true)Sleep(Sl_MS);
                    MOBSC_Buy=MOBSC_Def;
                    MOBSC_Sel=MOBSC_Def;
                    LotsBuy=Def_Lots;
                    LotsSel=Def_Lots;
                    
} } } } } } } } } }


//=============================================================================================================
// C L O S E   A L L   O R D E R S   A F T E R   ( S E R V E R   T I M E )
//=============================================================================================================

if(Close_all_Orders_after==true){
  if(Hour()>=Close_Hour&&Minute()>=Close_Min){

    for(n=OrdersTotal()-1;n>=0;n--){
      if(OrderSelect(n,SELECT_BY_POS)){
        if(OrderSymbol()==Symbol()){

          if(OrderMagicNumber()==MN_Sel){
            if(IsTradeAllowed()==true)OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Red);
            if(IsTradeContextBusy()==true)Sleep(Sl_MS);}

          if(OrderMagicNumber()==MN_Buy){
            if(IsTradeAllowed()==true)OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Red);
            if(IsTradeContextBusy()==true)Sleep(Sl_MS);}

} } }

} }


//=============================================================================================================
// E A   F U N K T I O N E N   B E E N D E N
//=============================================================================================================
}
er läuft zwar macht aber halt nicht das was ich suche vondemher bringt mir der nix