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.


Portalsuche


Werbung

Login
Benutzername:
Kennwort:


Statistik
Themen: 3824
Beiträge: 36909
Benutzer: 6.081
Aktive Benutzer: 495
Links: 80
Wir begrüßen unseren neuesten Benutzer: DarthTrader
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 2 Stunden
- DarthTrade...
vor 4 Stunden
- Eren
vor 11 Stunden
- Rene1504
vor 12 Stunden
- ibdafx
vor einem Tag
- Batangenyo

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

Empfehlungen

Werbung

Like Tree2Likes
Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #11 (permalink)  
Alt 08.06.16
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Ja klar. Da nur nach einem Kerzenwechsel die letzte und vorletzte Kerze abgefragt werden muß, braucht diese Abfrage auch nur einmalig pro Kerze sein.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #12 (permalink)  
Alt 09.06.16
Mitglied
 
Registriert seit: Sep 2013
Beiträge: 31
dieter23 befindet sich auf einem aufstrebenden Ast
Standard

hab mal die Long Routine soweit hingebracht, daß das Opening bei Kerzenwechsel funktioniert, nur das Schließen geht nicht, d. h. die Position wird sofort geschlossen. Im Terminal wird angezeigt: invalid ticket for OrderClose function.

Code:
extern double Lot=0.01;
extern int StopLoss=6;
extern int TakeProfit=10;
int Multiplier;
int i=0;

int zaehler;
int MagicNumber=1234;
double TPValue,SLValue;

//+------------------------------------------------------------------+

void OnInit() {
Multiplier = 1;
if(Digits == 3 || Digits == 5) Multiplier = 10;
if(Digits == 6) Multiplier = 100;
if(Digits == 7) Multiplier = 1000;

TakeProfit *= Multiplier;
StopLoss *= Multiplier;

TPValue = NormalizeDouble(TakeProfit * Point, Digits);
SLValue = NormalizeDouble(StopLoss * Point, Digits);

}

void start()
{
int ticket;
string comment="Expiration v2 (Long)";
//+------------------------------------------------------------------+
int offeneorders=0;
int anzahlorders=OrdersTotal();

if (Close[2] < Open[2] && Close[1] > Open[1])
{
for(zaehler=0; zaehler<anzahlorders; zaehler++)
{
OrderSelect(zaehler, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()==Symbol())
{
offeneorders++;
}
}

if(offeneorders==0)

{
ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Ask-SLValue,Ask+TPValue,comment,0,0,Blue);
}
if (Time[0] > OrderOpenTime() + 4*Period()*60)
{
OrderClose(ticket,Lot,Bid,3,0);
}
}
return(0);
}
  #13 (permalink)  
Alt 09.06.16
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Ich habe mir mal erlaubt, den Code per #-Button so darzustellen, dass man ihn auch lesen kann. So sollte das in Zukunft immer geschrieben werden, sonst kann ihn keiner helfen!

Code:
extern double Lot=0.01;
extern int StopLoss=6;
extern int TakeProfit=10;
int Multiplier;
int i=0;

int zaehler;
int MagicNumber=1234;
double TPValue,SLValue;

//+------------------------------------------------------------------+

void OnInit() {
   Multiplier = 1;
   if(Digits == 3 || Digits == 5) Multiplier = 10;
   if(Digits == 6) Multiplier = 100;
   if(Digits == 7) Multiplier = 1000;

   TakeProfit *= Multiplier;
   StopLoss *= Multiplier;

   TPValue = NormalizeDouble(TakeProfit * Point, Digits);
   SLValue = NormalizeDouble(StopLoss * Point, Digits);
}

void start() {
   int ticket;
   string comment="Expiration v2 (Long)";
   //+------------------------------------------------------------------+
   int offeneorders=0;
   int anzahlorders=OrdersTotal();

   if (Close[2] < Open[2] && Close[1] > Open[1]) {
      for(zaehler=0; zaehler<anzahlorders; zaehler++) {
         OrderSelect(zaehler, SELECT_BY_POS, MODE_TRADES);
         if(OrderSymbol()==Symbol()) {
            offeneorders++;
         }
      }

      if(offeneorders==0) {
         ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Ask-   SLValue,Ask+TPValue,comment,0,0,Blue);
      }
      if (Time[0] > OrderOpenTime() + 4*Period()*60) {
         OrderClose(ticket,Lot,Bid,3,0);
      }
   }
   return(0);
}
So kann das Programm nicht funktionieren.
Ich habe Einiges umgestellt und v.a. über Funktionsaufrufe den Code strukturiert und die SellOpen-Funktion eingebaut.

Code:
extern double Lot=0.01;
extern int StopLoss=6;
extern int TakeProfit=10;
int Multiplier;
int i=0;
int OffeneOrders;
int MagicNumber=1234;
double TPValue, SLValue;
string Comment = "Expiration v2 (Long)";

//+------------------------------------------------------------------+

int OnInit() {
   Multiplier = 1;
   if(Digits == 3 || Digits == 5) Multiplier = 10;
   if(Digits == 6) Multiplier = 100;
   if(Digits == 7) Multiplier = 1000;

   TakeProfit *= Multiplier;
   StopLoss *= Multiplier;

   TPValue = NormalizeDouble(TakeProfit * Point, Digits);
   SLValue = NormalizeDouble(StopLoss * Point, Digits);

   return(INIT_SUCCEEDED);
}

void OnTick() {
   CheckOrders();
   CheckOpening();
}

void CheckOrders() {
   bool ret;
   OffeneOrders = 0;
   for(int i = OrdersTotal()-1; i >= 0; i--) {
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
         if(OrderSymbol() == Symbol()) {
            if (OrderType() == OP_BUY) {
                if (Time[0] > OrderOpenTime() + 4*Period()*60) {
                  ret = OrderClose(OrderTicket(), OrderLots(), Bid, 3, 0);
                  if (ret) continue;
               }
            }
            if (OrderType() == OP_SELL) {
                if (Time[0] > OrderOpenTime() + 4*Period()*60) {
                  ret = OrderClose(OrderTicket(), OrderLots(), Ask, 3, 0);
                  if (ret) continue;
               }
            }
            OffeneOrders++;
         }
      }
   }
}

void CheckOpening() {
   if (Close[2] < Open[2] && Close[1] > Open[1]) {
      if(OffeneOrders == 0) {
         int ticket = OrderSend(Symbol(), OP_BUY, Lot, Ask, 3, Ask-SLValue, Ask+TPValue, Comment, 0, 0, Blue);
      }
   }
   if (Close[2] > Open[2] && Close[1] < Open[1]) {
      if(OffeneOrders == 0) {
         int ticket = OrderSend(Symbol(), OP_SELL, Lot, Bid, 3, Bid+SLValue, Bid-TPValue, Comment, 0, 0, Green);
      }
   }
}
Viel Erfolg!

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #14 (permalink)  
Alt 09.06.16
Mitglied
 
Registriert seit: Sep 2013
Beiträge: 31
dieter23 befindet sich auf einem aufstrebenden Ast
Standard

DANKE ! !
werde es gleich ausprobieren.
LG
Dieter
  #15 (permalink)  
Alt 10.06.16
Mitglied
 
Registriert seit: Sep 2013
Beiträge: 31
dieter23 befindet sich auf einem aufstrebenden Ast
Standard

Hallo traderdoc,
klappt prima, jetzt wollte ich noch, daß wenn die Position geschlossen wird, er nicht sofort in die laufende Kerze wieder eröffnet.
Gruß
Dieter23
  #16 (permalink)  
Alt 10.06.16
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Code:
datetime OldBar;

void OnTick() {
   if (OldBar != Time[0]) {
      CheckOpening();
      OldBar = Time[0];
   }
   CheckOrders();
}
Ich summiere mal das Honorar schon mal langsam auf.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #17 (permalink)  
Alt 10.06.16
Mitglied
 
Registriert seit: Sep 2013
Beiträge: 31
dieter23 befindet sich auf einem aufstrebenden Ast
Standard

vielleicht erinnern Sie sich noch an mich, Sie haben mir vor ca. 2 Jahre einen Bot programmiert. Name devisen-scalper, der martingalmäßig nachkauft über RSI Signal. Lief eine Weile sehr gut, dann hat er mir mein Konto geplättet.
Gruß
Dieter23
  #18 (permalink)  
Alt 10.06.16
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Ja natürlich. Das ist natürlich sehr schade, lag jedoch nicht an meinem Teil der Programmierung. Der Hauptteil des EAs war fremdgecodet, was auch nicht bedeutet, dass da die Ursache zu suchen sei. Ein Handelssystem auf Martingale-Basis ist immer ein heißes Eisen, mit viel Potential nach oben, aber eben auch nach unten.

Wenn es wieder mal was zu programmieren gibt, dann sagen Sie einfach Bescheid.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.

Geändert von traderdoc (10.06.16 um 18:10 Uhr)
  #19 (permalink)  
Alt 10.06.16
Mitglied
 
Registriert seit: Sep 2013
Beiträge: 31
dieter23 befindet sich auf einem aufstrebenden Ast
Standard

Ja klar, Ihre Programmierung war spitze. War halt sehr riskant mit Martingale.
Wenn ich wieder Hilfe brauche melde ich mich.Ok.
LG
Dieter23
Thema geschlossen

Lesezeichen

Stichworte
kerze, kerzen, kerzenwechsel, mql4, programmierung, programmierung metatrader, wechsel kerze


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 03:06 Uhr.



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