Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Hilfe bei nachkomma Programieren (http://www.expert-advisor.com/forum/showthread.php?t=3654)

tenchinhan 05.05.14 08:34

Hilfe bei nachkomma Programieren
 
Hallo,
ich habe ein Indikator der auch super bei 5 Digits(Nachkommerstellen) funktioniert,
jetzt bin ich mit einem Standard Konto am testen wo es allerdings nur 4 nachkommastellen gibt und ich finde keine Lösung wie ich das in den Indikator einbaue bzw. verändere!
Vielleicht kann mir jemand einen tipp geben oder hat eine einfache Lösung für das Problem!
Hier der entsprechende Code:

//+------------------------------------------------------------------+
//| Linesetter |
//| By Björn Boumanns |
//+------------------------------------------------------------------+
#property copyright "Björn Boumanns"
#property link "http://Tenchinhan.de"

#property indicator_chart_window
extern int GridSpace=50;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
double shift=0;
double HighPrice=0;
double LowPrice=0;

double Divisor = 0.1/Point;

HighPrice = MathRound(High[Highest(NULL,0,2, Bars - 2, 2)] * Divisor);
//SL = High[Highest(MODE_HIGH, SLLookback, SLLookback)];
LowPrice = MathRound(Low[Lowest(NULL,0,1, Bars - 1, 2)] * Divisor);
for(shift=LowPrice;shift<=HighPrice;shift++)
{
ObjectDelete("Grid"+shift);
}
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
double I=0;
double HighPrice=0;
double LowPrice=0;
int GridS=0;
int SL=0;
//----

double Divisor = 0.1/Point;

HighPrice = MathRound(High[Highest(NULL,0,MODE_HIGH, Bars - 2, 2)] * Divisor);
//SL = High[Highest(MODE_HIGH, SLLookback, SLLookback)];
LowPrice = MathRound(Low[Lowest(NULL,0,MODE_LOW, Bars - 1, 2)] * Divisor);
GridS = GridSpace / 12.5;

for(I=LowPrice;I<=HighPrice;I++)
{
//Print("mod(I, GridSpace): " + MathMod(I, GridS) + " I= " + I);
//Print(LowPrice + " " + HighPrice);
if (MathMod(I, GridS) == 0)
{
if (ObjectFind("Grid"+I) != 0)
{
ObjectCreate("Grid"+I, OBJ_HLINE, 0.1, Time[1], I/Divisor);
ObjectSet("Grid"+I, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet("Grid"+I, OBJPROP_COLOR, MediumSeaOrange);
}
//MoveObject(I + "Grid", OBJ_HLINE, Time[Bars - 2], I/1000, Time[1], I/1000, MediumSeaOrange, 1, STYLE_SOLID);
}
}
//----
return(0);
}
//+------------------------------------------------------------------+




MfG
Björn

Crashbulle 05.05.14 14:06

Hallo Björn,

das liegt an der fehlenden DIGIT-Abfrage, wenn es im 5-Digit lief und in 4er nicht.
Unten hast du eine Standartabfrage, welches aber aus einem 5-Digit Account ein 4er macht.
Dafür läuft er aber mit 4-Digiteinstellungen, ohne Änderung auch auf 5 und 3 Digitwerten.
Du kannst aber auch eine Digitabfrage, bei allen relevanten Werte einfügen. Der Nachteil ist hierbei, das du in deinen Settings immer darauf achten mußt, bei welchen DIGITgrößen du gerade den EA aktivierst.

Ein Beispiel siehst du unten:

//---
stop_loss = STOP_LOSS;
take_profit = TAKE_PROFIT;
inside_level = INSIDE_LEVEL;
trailing_level = TRAILING_STOP;
trailing_step = TRAILING_STEP;
slippage = SLIPPAGE;
order_step = ORDER_STEP;

//--- If the price includes 3 / 5 decimal places
if(Digits == 4) Multiplier = 1;
if(Digits == 3 || Digits == 5) Multiplier = 10;
{
stop_loss = stop_loss * 10;
take_profit = take_profit * 10;
inside_level = inside_level * 10;
trailing_level = trailing_level * 10;
trailing_step = trailing_step * 10;
slippage = slippage * 10;
order_step = order_step * 10;
}

tenchinhan 05.05.14 15:52

Hallo
danke für deine Antwort aber wenn ich das richtig verstanden habe,
soll der erweiterte Code dafür sein das er in 4 bzw. 5 Digit läuft!

Mein Problem ist aber nicht das er nicht Lauft ,
das Problem ist das er gar keine nach Komma Einstellungen an nimmt!
Bei 5 Digit kein Problem da kann ich z.b. für 12,5 Pips einfach 125 in den Einstellungen eingeben bei 4 Digit müsste es allerdings 12,5 heißen aber das will einfach nicht klappen!

MfG Björn

fxdaytrader 05.05.14 16:29

ändere extern int GridSpace=50; in
extern double GridSpace=50;

dann kannst' Nachkommastellen eingeben bis der Arzt kommt :cool:

tenchinhan 05.05.14 17:06

@fxdaytrader
Super Danke klappt jetzt wie es soll:D
Noch 1-2 Jahre dann Lache ich über solche Probleme dann Kann ich auch Programieren ohne das mir schon der Kopf Qualmt wenn ich nur den Code seh:)

Crashbulle 05.05.14 20:16

Das kommt dabei heraus, wenn man nur die Fehlerbeschreibung liest und den Rest überfliegt.
Allerdings bin ich etwas irritiert, das die "int"-Funktion in 5-Digit funktionieren soll und bei der 4-Digit nicht !!

tenchinhan 05.05.14 20:25

@crashbull
Ich hatte mich vielleicht etwas falsch ausgedrückt gelaufen hat der Indikator auf beiden egal ob 4 oder5 digit mein Problem war nur das bei 5 digit eine Stelle mehr ist das heißt für eine Linie bei 12,5 muss ich 125 angeben also kein Problem aber bei 4 digit muss ich 12,5 angeben und das wollte der Indikator nicht das Macht er jetzt mit der Änderung in Double!

Sorry die schreibst benutze grad das Handy!

Mit freundlichen Grüßen
Björn

tenchinhan 06.05.14 22:48

Hallo alle zusammen,
ich stehe jetzt vor dem nächsten Problem dank der Änderung von ini zu double kann ich jetzt bei den Einstellungen auch Nachkomma Stellen eingeben,
aber aus irgendeinem Grund macht er bei z.b. 12,5(4 Digit) bzw. 125 (5 Digit) trotzdem nur 12er bzw. 120er Schritte!
Ich hoffe ihr könnt mit dabei weiter helfen!

MfG
Björn

Crashbulle 07.05.14 00:14

Dies hängt wahrscheinlich mit den Digits zusammen. In einer 12m Garage kannst du kein 12,5m langes Gefährt unterbringen. Mit den 12,5 versuchst du aus dem 4-Digit ein gewaltsames 5-Digit zu machen. Dieses, Komma irgendwas, kann zwar eingegeben werden, fällt aber später fort, da es nicht akzeptiert wird.

Zum 5-Digit-Fall vermute ich, das es im EA eine Verwirrung in den Berechnungen mit 5 und 4-Digit gibt, welches aber aus dem vorhandenem Code nicht ersichtbar ist. Auch hier wären " init und Double" Anweisungen genau zu untersuchen.

tenchinhan 07.05.14 11:27

danke für deine Antwort dann muss ich wohl mal schauen wie ich das hin bekomme auf ganze zahlen ist da ja schon ein netter Indikator ist immer so lästig die ganzen Linien von Hand einzugeben:(


Alle Zeitangaben in WEZ +2. Es ist jetzt 14:27 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum