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); } |
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 = ""; |
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 |
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. |
Hat sich erledigt :)
Jetzt, wo ich den Code in der onTick() weiter nach oben verschoben habe, funktioniert es.. |
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