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 MQL5 (http://www.expert-advisor.com/forum/forumdisplay.php?f=221)
-   -   Preis eines Objektes in der Nähe des Bid/Ask-Kurses (http://www.expert-advisor.com/forum/showthread.php?t=7176)

Yango 28.04.22 15:35

Hallo

also ich muss sagen, stark und clever gelöst.. und das ohne Array(dachte ich bräuchte eins). Ich habe es für mich noch etwas angepasst, jetzt habe ich auch meinen Preis! mit DBL_MAX habe ich bis jetzt noch nicht gearbeitet, sehr interessant zu sehen. Kannst du mir noch sagen, warum du "ObjektNumber_of_min" auf -1 gesetzt hast, beim initialisieren? Kann es sein, dass die Objektnummern automatisch über ein Array abgefragt werden?

double Price = SymbolInfoDouble(Symbol(), SYMBOL_ASK);
double Price_Difference_Min = DBL_MAX;

int ObjektNumber_of_Min = -1;
string ObjektName_of_Min = "";
double price_temp = "";


for(int i = 0; i < ObjectsTotal(0, 0, -1) ; i++){
string ObjectNameTemp = ObjectName(0, i, -1, -1);
if (ObjectGetInteger(ChartID(), ObjectNameTemp, OBJPROP_TYPE) == OBJ_HLINE && ObjectGetInteger(ChartID(), ObjectNameTemp, OBJPROP_COLOR) == clrAqua){
double TempValue = ObjectGetDouble(0, ObjectNameTemp, OBJPROP_PRICE, 0);

if(MathAbs(TempValue - Price) < Price_Difference_Min){
Price_Difference_Min = MathAbs(TempValue - Price);
ObjektName_of_Min = ObjectNameTemp;
ObjektNumber_of_Min = i;
price_temp = TempValue;
}
}
}

if(Price_Difference_Min != DBL_MAX){
Print("Min Object Name: ", ObjektName_of_Min, " Id: ", ObjektNumber_of_Min);
Print("Price Difference: ", Price_Difference_Min);
Print("Price : ", price_temp);
}

Indikator-Trading 29.04.22 08:39

Hallo,

ObjektNumber_of_Min müsstest du nicht auf -1 setzen, allerdings könnte man später im Code auch hierdurch erkennen ob ein Objekt überhaupt gefunden worden ist welches deinen Suchvorgaben entspricht. Im Endeffekt mache ich dies ja später im Code mit if(Price_Difference_Min != DBL_MAX). Da könntest du also auch if(ObjektNumber_of_Min != -1) einsetzten und es würde ebenfalls funktionieren.
Es ist generell Sinnvoll alle Variablen mit einen Wert zu Initialisieren. Für die String Variable hätte ich aber besser NULL genommen, was etwas "sauberer" programmiert wäre.

Ich sehe gerade, dass du dies hier im Code hast:
Code:

double price_temp = "";
Double ist kein String, also bitte nicht mit "" initialisieren.

Yango 29.04.22 16:00

Gut, dass du das sagst. Ich habe jetzt eine 0, statt "" bei der Initialisierung. Ich hatte mich schon gewundert.. manchmal kommt er dadurch durcheinander. Ich hatte irgendwie in Erinnerung, dass "" als Speicher fungiert, was falsch war.

Liebe Grüße

Yango 03.05.22 16:11

int ObjektNumber_of_Min_SELL = -1;
string ObjektName_of_Min_SELL = "";
double price_temp_SELL = 0;

double Price_Difference_Min_Sell = DBL_MAX;

for(int i = 0; i < ObjectsTotal(0, 0, -1) ; i++){
string ObjectNameTemp = ObjectName(0, i, -1, -1);
if (ObjectGetInteger(ChartID(), ObjectNameTemp, OBJPROP_TYPE) == OBJ_HLINE && ObjectGetInteger(ChartID(), ObjectNameTemp, OBJPROP_COLOR) == clrBrown){
double TempValue_SELL = ObjectGetDouble(0, ObjectNameTemp, OBJPROP_PRICE, 0);

if(MathAbs(TempValue_SELL - ask) < Price_Difference_Min_Sell){
Price_Difference_Min_Sell = MathAbs(TempValue_SELL - ask);
ObjektName_of_Min_SELL = ObjectNameTemp;
ObjektNumber_of_Min_SELL = i;
price_temp_SELL = TempValue_SELL;
Print("SL SELL: ",price_temp_red_zone);
Print("Price SELL: ",price_temp_SELL);
}
}
}

if(bid >= price_temp_SELL && (price_temp_SELL > 0)) SELL(price_temp_red_zone);

Weisst du zufällig, welchen Fehler ich hier mache?

Meistens öffnet er die Position, doch manchmal auch nicht. Die Variable, welche der Funktion "SELL" übergeben wird, ist der Stop-Loss.

Der Preis und StopLoss passt vom Wert her immer (gebe die Preise über Print aus und sehe es auch auf dem Chart/Preis von Linie), weshalb ich das ganze nicht wirklich verstehen kann.

Yango 05.05.22 11:16

Hat sich erledigt :)

Jetzt, wo ich den Code in der onTick() weiter nach oben verschoben habe, funktioniert es..

Yango 20.07.22 13:58

Weisst du zufällig auch, wie ich den zweinächsten Preis erhalte? Für mich grad schwieriger, als gedacht!

for(int i = 0; i < ObjectsTotal(0, 0, -1) ; i++){
string ObjectNameTemp = ObjectName(0, i, -1, -1);
if (ObjectGetInteger(ChartID(), ObjectNameTemp, OBJPROP_TYPE) == OBJ_HLINE && ObjectGetInteger(ChartID(), ObjectNameTemp, OBJPROP_COLOR) == clrMaroon){
double TempValue_red_zone = ObjectGetDouble(0, ObjectNameTemp, OBJPROP_PRICE);

if(MathAbs(TempValue_red_zone - bid) < Price_Difference_Min_Red_Up){
Price_Difference_Min_Red_Up = MathAbs(TempValue_red_zone - bid);
ObjektName_zone_red_up = ObjectNameTemp;
ObjektNumber_zone_red_up = i;
temp_red_up = TempValue_red_zone;
Print(temp_red_up);
}
}
}


Alle Zeitangaben in WEZ +2. Es ist jetzt 22:46 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