Lieber traderdoc,
ich mühe mich redlich, - und das seit Stunden !
Im Allgemeinen hast Du schon recht, alle wollen sich einen EA "basteln" aber keiner will dessen Sprache verstehen.
Im Besonderen gibt es aber auch User, welche die Sprache erlernen und richtig anwenden wollen. - Und das versuche ich seit nunmehr einem Jahr (Stück für Stück - und immer, wenn es die Zeit erlaubt). Momentan muss ich mich aber mit "no body is perfect" zufrieden geben !
Was meine aktuellen Bemühungen angeht, bin ich jetzt HIER angelangt:
Code:
extern string LastDays = "Today=0, Yesterday=1 aso.";
extern int Shift = 0;
double Profit();
int Line();
int Text();
//+------------------------------------------------------------------+
// CustomIndicator initialization function |
//+------------------------------------------------------------------+
int init() {
initGraph();
{
if (IsConnected()) main();
}
return(0); }
//+------------------------------------------------------------------+
// CustomIndicator deinitialization function |
//+------------------------------------------------------------------+
int deinit() {
ObjectsDeleteAll(0,OBJ_LABEL);
return(0); }
//+------------------------------------------------------------------+
// CustomIndicator start function |
//+------------------------------------------------------------------+
int start() {
if (IsConnected()) main();
return(0); }
//+------------------------------------------------------------------+
// CustomIndicator function |
//+------------------------------------------------------------------+
void main() {
//+--- get Profit() global scope ------------------------------------+
double Profit()
{
double x = 0;
double Summe = 0;
for(int i = OrdersHistoryTotal() - 1 ; i >= 0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol())
{
if (OrderCloseTime() >= iTime(NULL, PERIOD_D1, Shift) &&
OrderCloseTime() < iTime(NULL, PERIOD_D1, Shift-1))
{
x = OrderProfit()
Summe += x;
}
}
}
Print("Summe", Summe);
}
return(Summe);
}
//+--- Unterscheidg. Prof/Loss bzw. CLRgreen_up/CLRred_down
double prof = Profit();
// Rückgabewerte für Variablen
if(prof >= 0) paintProf(prof); // (prof) für Weiterverarbtg. unter paintProf
if(prof < 0) paintLoss(prof); // (prof) für Weiterverarbtg. unter paintLoss
//+--- paint-Bereich ------------------------------------------------+
paintLine();
paintSign();
paintsumme();
}
//+------------------------------------------------------------------+
void initGraph() {
ObjectsDeleteAll(0,OBJ_LABEL);
objectCreate("Line",10,17,"-----------------------------------",10,"Arial",LightSlateGray); // Line
objectCreate("Sign",10,7,"PROFIT(euro):",9,"Arial Narrow",LightSlateGray); // Text
objectCreate("Summe",134,25,DoubleToStr(9,1),10,"Arial Narrow",Silver); // Wert / DoubleToStr(9,1) (value,digits)
objectCreate("Prof",130,67); // Rectangle 1 green
objectCreate("Loss",130,61); // Rectangle 2 red
WindowRedraw();
}
//+--- Label, Positionierg., Hintergrundfarbe und Textvorgaben ----------------------------------------------------------------+
void objectCreate(string name,int x,int y,string text="-",int size=12,
string font="Arial",color colour=CLR_NONE) {
ObjectCreate(name,OBJ_LABEL,0,0,0);
ObjectSet(name,OBJPROP_CORNER,3);
ObjectSet(name,OBJPROP_COLOR,colour);
ObjectSet(name,OBJPROP_XDISTANCE,x);
ObjectSet(name,OBJPROP_YDISTANCE,y);
ObjectSetText(name,text,size,font,colour);
}
//+--- Zuordnung Farb-Eigenschaften --------------------------------------------------------------------------------------------+
void paintLine() {
ObjectSet("ZeroLine",OBJPROP_COLOR,LightSlateGray);
}
void paintSign() {
ObjectSet("Sign",OBJPROP_COLOR,LightSlateGray);
}
void paintsumme(int value) {
if(value >= 0)
ObjectSetText("Summe",DoubleToStr(value,0),10,"Arial Black",Green); // für sich ändernde Wert-Angabe + summe in EUR
if(value < 0)
ObjectSetText("Summe",DoubleToStr(value,0),10,"Arial Black",Maroon); // für sich ändernde Wert-Angabe - summe in EUR
}
void paintM1(double value) {
if (value >= 0)
ObjectSet("Prof",OBJPROP_COLOR,Green); // Rectangle Prof
// ObjectSetText("...",DoubleToStr(value,0),8,"Arial Narrow",Green); // Part 2: für sich ändernde Wert-Angabe in Point/pip
}
void paintM5(double value) {
if (value < 0)
ObjectSet("Loss",OBJPROP_COLOR,Maroon); // Rectangle Loss
// ObjectSetText("...",DoubleToStr(value,0),8,"Arial Narrow",Maroon); // Part 2: für sich ändernde Wert-Angabe in Point/pip
}
//+--- The PRG-End -------------------------------------------------------------------------------------------------------------+
Sieht für den Laien vielleicht recht gut aus, ist aber mit 4 Fehlern behaftet:
1. "Profit"-function can be declared only in the globalscope
2. "paintProf" - function not defined
3. "paintLoss" - function not defined und
4. "PaintSumme" - wrong parameters count
Ursprünglich waren es 23 errors und ?? warnings, welche ich ausräumen konnte, - jetzt komme ich aber einfach nicht weiter.
Vielleicht kannst Du nochmals einen Blick darüber werfen und mir mit Deinen Hinweisen zur Seite stehen ?
Wäre richtig toll.
LG. piptrade
PS.: Auf dem angehängten JPG werden die abgeschlossenen Trades (EA arbeitet momentan OHNE Filter!) bereits dargestellt - die programm-technische Umsetzung der manuell eingefügten Grafik ist das Ziel des obigen Codes. So hat man vielleicht eine bessere Vorstellung.