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: 36968
Benutzer: 6.076
Aktive Benutzer: 496
Links: 80
Wir begrüßen unseren neuesten Benutzer: Spitzmaus
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 10 Stunden
- Spitzmaus
vor 13 Stunden
- juleslesqu...
vor einem Tag
- hmf44
vor einem Tag
- Crossa
vor einem Tag
- snatshit

Onlineuser
'Wer ist online' anzeigen Benutzer: 2
Gäste: 68
Gesamt: 70
Team: 0
Team:  
Benutzer:  Domke01, fxnoob
Freunde anzeigen

Empfehlungen

Werbung

Like Tree1Likes
Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 08.01.16
Neues Mitglied
 
Registriert seit: Aug 2015
Beiträge: 12
carnap befindet sich auf einem aufstrebenden Ast
Standard Cannot set indicator buffers!

Habe versucht den T3MA in einem EA als custom indicator zu verwenden.
Bekomme beim Backtest die obige Meldung bezüglich indicator buffer:
Hier der Code bis zur Orderaufgabe.

#property copyright "xxx"
#property link ""
#property version "1.00"
//#property strict

extern bool Alarmset=true; //T3MA Alarm box
int infoversand = 0;

double upbuffer[500]; // array buffer for xup signal
double dnbuffer[500]; // array buffer for xdwn signal
int sep;

extern int MaxOrdersProTag = 1 ;
extern double Lots = 0.1;
int aufgegebeneOrders = 0;
int signal;
int ticket;
extern bool TrailingStoppNutzen = 1;
extern int TrailStarten = 40;
extern int TrailAbstand = 30;
extern int Stopp = 80;
extern int Kursziel = 70;
extern int MagicNumber = 4526;
extern double oben= 100;
extern double unten= 99;



//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//indicators

#property indicator_chart_window //T3MA Alarm



SetIndexStyle(0,DRAW_ARROW,2);
SetIndexArrow(0,233); //This is buy signal
SetIndexBuffer(0, upbuffer);

SetIndexStyle(1,DRAW_ARROW,2);
SetIndexArrow(1,234); //This is short signal
SetIndexBuffer(1,dnbuffer);

if(Symbol()=="EURUSD"){sep=40;} //seperator space in points for arrow
if(Symbol()=="USDCHF"){sep=30;}
if(Symbol()=="USDJPY"){sep=30;}
if(Symbol()=="GBPUSD"){sep=30;}
if(Symbol()=="EURJPY"){sep=200;}
if(Symbol()=="GBPJPY"){sep=120;}
if(Symbol()=="AUDUSD"){sep=120;}
if(Symbol()=="EUREX.FDX"){sep=2000;}
if(Symbol()=="CME.ES"){sep=150;}

return(0);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---

}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{

//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
// int counted_bars=IndicatorCounted();
double ax0[500];
double ax1[500];
double ax2[500];
int xdown,xup;
for(int cnt=200;cnt>=0;cnt--)
{
ax0[cnt]=iCustom(NULL,0,"T3MA",4,1.5,cnt); //ax0,1,2 for determine turning point of T3MA
ax1[cnt+1]=iCustom(NULL,0,"T3MA",4,1.5,cnt+1);
ax2[cnt+2]=iCustom(NULL,0,"T3MA",4,1.5,cnt+2);

if(ax0[cnt]-ax1[cnt+1]<0 && ax1[cnt+1]-ax2[cnt+2]>0){xdown=1;} else {xdown=0;} //definition for turning point
if(ax0[cnt]-ax1[cnt+1]>0 && ax1[cnt+1]-ax2[cnt+2]<0){xup=1;} else {xup=0;}

if(xdown==1){dnbuffer[cnt+1]=High[cnt+1]+(sep*Point);} //setting arrow down above High
if(xup==1){upbuffer[cnt+1]=Low[cnt+1]-(sep*Point);} //setting arrow up below Low
}
//

if(xup==1 && Alarmset && infoversand == 0){
Alert (Symbol()," ",Period()," STOCH-ALARM 3 >> BUY ");
infoversand = 1;
}

if(xdown==1 && Alarmset && infoversand == 0){
Alert (Symbol()," ",Period()," STOCH-ALARM 3 >> SELL ");
infoversand = 1;
}

double MomentumFilter = iMomentum(NULL,0,14,PRICE_CLOSE,1);

//+------------------------------------------------------------------+
//| determine signal |
//+------------------------------------------------------------------+

if (xup=1 && (MomentumFilter > oben)) {
signal = 1;
}

if (xup=0 && (MomentumFilter < oben)) {
signal = 0;
}


if (xdown=1 && (MomentumFilter < unten)){
signal = -1;
}

if (xdown=0 && (MomentumFilter > unten)){
signal = 0;
}

//+------------------------------------------------------------------+
//| placing orders |
//+------------------------------------------------------------------+



if(signal == 1 && aufgegebeneOrders < MaxOrdersProTag && OrdersTotal() == 0){
ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,30,Ask - Stopp,Ask + Kursziel,"Trend Longorder",MagicNumber,0,Green);
if(ticket>0)aufgegebeneOrders++;
}

etc.


Kann mir jemand weiterhelfen? Bin noch ziemlich unerfahren, aber lernwillig.
  #2 (permalink)  
Alt 08.01.16
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Nun, ich denke in einem EA wird man keine Indikatorpuffer setzen können, weil man die in einem Indikator setzt.
Lösung:
Lass einen Indikator einen Indikator sein und einen EA eine EA, d.h., dass was Du als Indikator in dem EA schreiben wolltest, packe es als einen separaten Indikator und rufe jegliche Indikatoren mittels iCustom() aus dem EA heraus auf.

traderdoc
marquez likes this.
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #3 (permalink)  
Alt 08.01.16
Neues Mitglied
 
Registriert seit: Aug 2015
Beiträge: 12
carnap befindet sich auf einem aufstrebenden Ast
Standard

Hallo Traderdoc,

wenn ich dich richtig verstanden habe, wäre es sinnvoller die Indikatorbeschreibung als Indikator abzuspeichern und mit icustom aufzurufen. Etwa so:
upturn= icustom(NULL,0,name,input parameter,0,1);
dwnturn= icustom(NULL,0,name,input parameter,1,1);

Ich frage mich wie ich die turns aus der icustom Funktion auslesen kann.
Ist upbuffer und downbuffer ausreichend?
  #4 (permalink)  
Alt 08.01.16
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Ja, genau.
Ich habe jetzt Deinen Code nicht so genau analysiert, aber die entscheidenden Indikatordaten werden ja immer in diesen Indikatorbuffers abgelegt. Und die können aus dem EA mittels iCustom() abgerufen werden.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #5 (permalink)  
Alt 09.01.16
Neues Mitglied
 
Registriert seit: Aug 2015
Beiträge: 12
carnap befindet sich auf einem aufstrebenden Ast
Standard

Ist vermutlich doch komplizierter als ich zunächst dachte.

Habe folgendes probiert:

i Custom(NULL,0,"T3MA-Alarm",Alarmset, infoversand, upbuffer, downbuffer)

daraus:

xup = i Custom(NULL,0,"T3MA-Alarm",1,0,1,0,1);
xdwn=iCustom(NULL,0,"T3MA-Alarm",1,0,0,1,1);

Das gibt zwar keine Fehlermeldung beim kompilieren, aber funktioniert nicht.
Letztendlich würde so nur der upbuffer und downbuffer ausgelesen, aber eigentlich möchte ich ja die turns aus dem Code in Posting #1 auslesen und diese zur Signalgebung nutzen.
Geht es denn überhaubt einen Indikator auszulesen, der selbst wiederum einen Indikator ausliest?
  #6 (permalink)  
Alt 09.01.16
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Zur Not würde ich dann Deinen Indikator in den des T3MA schreiben.
Der u.g. Code ist zu komplex, um jetzt auf die Schnelle eine optimale Lösung zu haben.
Aber die Wege habe ich Dir aufgezeigt.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #7 (permalink)  
Alt 10.01.16
Neues Mitglied
 
Registriert seit: Aug 2015
Beiträge: 12
carnap befindet sich auf einem aufstrebenden Ast
Standard

Das hatte ich mir auch schon überlegt, aber der T3MA verwendet bereits 7 buffers und man müsste dann ja zwei buffer für upbuffer und downbuffer hinzufügen, was aber durch das buffer Limit nicht möglich ist.

Ich habe den EA mit einem iMA durchgeführt um zu überprüfen, ob er den prinzipiell funktioniert.
Es werden nur short Signale erzeugt.
Ich verstehe aber nicht warum dies der Fall ist.
Hier nochmal der Code bis einschließlich Orderaufgabe. Vielleicht hat jemand eine Idee.




void OnTick()
{



if(Hour() == 8 && Minute() == 0){
aufgegebeneOrders =0;

}

int xdown,xup:


double ax1=iMA(NULL,0,13,8,MODE_EMA,PRICE_CLOSE,1);
double ax2=iMA(NULL,0,13,8,MODE_EMA,PRICE_CLOSE,2);
double ax3=iMA(NULL,0,13,8,MODE_EMA,PRICE_CLOSE,3);

if(ax1-ax2<0 && ax2-ax3>0){xdown=1;} else {xdown=0;}
if(ax1-ax2>0 && ax2-ax3<0){xup=1;} else {xup=0;}



//+------------------------------------------------------------------+
//| determine signal |
//+------------------------------------------------------------------+

if (xup == 1 ) {
signal = 1;
}

if (xup == 0 ) {
signal = 0;
}


if (xdown == 1){
signal = -1;
}

if (xdown == 0){
signal = 0;
}

//+------------------------------------------------------------------+
//| placing orders |
//+------------------------------------------------------------------+

if(signal == 1 && aufgegebeneOrders < MaxOrdersProTag && OrdersTotal() == 0){ // prüfen ob bereits eine Order aufgegeben wurde
ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,30,Ask - Stopp,Ask + Kursziel,"Trend Longorder",MagicNumber,0,Green); // Order aufgeben
if(ticket>0)aufgegebeneOrders++; // Variable die die Anzahl der Orders enthält um eins hochzählen
}

if(signal == -1 && aufgegebeneOrders < MaxOrdersProTag && OrdersTotal() == 0){ // prüfen ob bereits eine Order aufgegeben wurde
ticket = OrderSend(Symbol(),OP_SELL,Lots,Bid,30,Bid + Stopp,Bid - Kursziel,"Trend Shortorder",MagicNumber,0,Red); // Order aufgeben
if(ticket>0)aufgegebeneOrders++; // Variable die die Anzahl der Orders enthält um eins hochzählen
}
  #8 (permalink)  
Alt 16.01.16
Neues Mitglied
 
Registriert seit: Aug 2015
Beiträge: 12
carnap befindet sich auf einem aufstrebenden Ast
Standard

EA zeigt Divergenz Backtesting - Live Handel

Habe seit drei Tagen einen EA im Probehandel.
Heute hätte der EA eine Sell Order auslösen sollen. Die Sell Order hätte dann kurz vor Börsenschluss wieder geschlossen werden sollen. Der EA hat aber nicht gehandelt.

Im Strategietester habe ich den EA die letzten drei Tage back getestet. Dort wird die Position ordnungsgemäß eröffnet und geschlossen.

Woran kann es liegen, dass der EA im Strategietester auf (Tickbasis) handelt nicht jedoch live im Demobetrieb?
  #9 (permalink)  
Alt 16.01.16
Benutzerbild von Crashbulle
Elite Mitglied
 
Registriert seit: Sep 2011
Ort: Voreifel
Beiträge: 584
Crashbulle befindet sich auf einem aufstrebenden Ast
Crashbulle eine Nachricht über MSN schicken Crashbulle eine Nachricht über Skype™ schicken
Standard

Das ist doch ganz einfach zu beantworten.

Im Strategietester werden die hinterlegten Tickdaten genommen, mit deinem voreingestellten SPREAD,

während im Demo, die annährend realen Daten mit dem jeweils aktuellen SPREAD verarbeitet werden.

Die nächste Ungläubigkeit wird dir dann noch im Live (Real) bevorstehen !
__________________
Was hoch aufsteigt, fällt tief herunter
Portfolio
Portfolio_1
  #10 (permalink)  
Alt 16.01.16
Neues Mitglied
 
Registriert seit: Aug 2015
Beiträge: 12
carnap befindet sich auf einem aufstrebenden Ast
Standard

Am Spread kann es nicht liegen sowohl im Tester als auch im EA ist er auf 30 eingestellt.
Daran kann es also eigentlich nicht liegen.
Thema geschlossen

Lesezeichen

Stichworte
indicator buffers, indikator puffer, indikatorpuffer, mql4, programmierung, programmierung metatrader, puffer


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 07:39 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.
-----------------------------------------------------------------------------------------------------------------------------