[Archiv!] Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Könnte nirgendwo ohne dich hingehen - 2. - Seite 441

 

Hallo zusammen!

Ich kann die Einzahlung im Handelsbericht nicht korrekt anzeigen lassen. )) Ich tue dies:

#define RA 10000

if(Trade_Report == TRUE && !IsOptimization())
   {  int      pos;
      int      handle;
      int      Days;
      double   Swap_M;
      double   Profit_M;
      double   Swap_P;
      double   Profit_P;

      double   Source_LP[RA], LP_01[RA], LP_02[RA], LP_03[RA], LP_04[RA], LP_05[RA], LP_06[RA];
      double   Source_LP_02[RA], LP_01_02[RA], LP_02_02[RA], LP_03_02[RA], LP_04_02[RA], LP_05_02[RA], LP_06_02[RA];
      double   Source_SP[RA], SP_01[RA], SP_02[RA], SP_03[RA], SP_04[RA], SP_05[RA], SP_06[RA];
      double   Source_SP_02[RA], SP_01_02[RA], SP_02_02[RA], SP_03_02[RA], SP_04_02[RA], SP_05_02[RA], SP_06_02[RA];
      double   Load_Depo[RA]; 
   
      handle = FileOpen("OrdersReport.csv",FILE_CSV|FILE_WRITE);
   
      if(handle > 0)
                {//1
            FileWrite(handle,"Time Close"+","+"Lots"+","
                              +"Swap($)"+","+"Profit($)"+","+"Swap(p)"+","+"Profit(p)"+","+"Load Depo"+","
                              +"SOURCE_LP"+","+"LP#01"+","+"LP#02"+","+"LP#03"+","+"LP#04"+","+"LP#05"+","+"LP#06"+","
                              +"SOURCE_SP"+","+"SP#01"+","+"SP#02"+","+"SP#03"+","+"SP#04"+","+"SP#05"+","+"SP#06");
            for(pos = 0; pos < OrdersHistoryTotal(); pos++)
               {  OrderSelect(pos,SELECT_BY_POS,MODE_HISTORY); //2
               
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_Source_LP && OrderCloseTime() == TimeCurrent()) { Source_LP[pos] = OrderProfit(); }
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_LP01 && OrderCloseTime() == TimeCurrent()) { LP_01[pos] = OrderProfit(); }
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_LP02 && OrderCloseTime() == TimeCurrent()) { LP_02[pos] = OrderProfit(); }
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_LP03 && OrderCloseTime() == TimeCurrent()) { LP_03[pos] = OrderProfit(); }
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_LP04 && OrderCloseTime() == TimeCurrent()) { LP_04[pos] = OrderProfit(); }
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_LP05 && OrderCloseTime() == TimeCurrent()) { LP_05[pos] = OrderProfit(); }
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_LP06 && OrderCloseTime() == TimeCurrent()) { LP_06[pos] = OrderProfit(); }
                     
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_Source_SP && OrderCloseTime() == TimeCurrent()) { Source_SP[pos] = OrderProfit(); }
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_SP01 && OrderCloseTime() == TimeCurrent()) { SP_01[pos] = OrderProfit(); }
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_SP02 && OrderCloseTime() == TimeCurrent()) { SP_02[pos] = OrderProfit(); }
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_SP03 && OrderCloseTime() == TimeCurrent()) { SP_03[pos] = OrderProfit(); }
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_SP04 && OrderCloseTime() == TimeCurrent()) { SP_04[pos] = OrderProfit(); }
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_SP05 && OrderCloseTime() == TimeCurrent()) { SP_05[pos] = OrderProfit(); }
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_SP06 && OrderCloseTime() == TimeCurrent()) { SP_06[pos] = OrderProfit(); }
                  
            //--- Вычисление загрузки депозита ---//
                  int              Amount_LD;
                  datetime         CurrentCloseTime = OrderCloseTime();
                  static datetime  CloseTime;                  
                  
                  if(CurrentCloseTime != CloseTime)
                     { Amount_LD = 1;
                       Load_Depo[pos] = (Amount_LD*(OrderLots()*1000)/AccountBalance())*100;
                       CloseTime = OrderCloseTime(); }
                  else if(CurrentCloseTime == CloseTime)
                          { Amount_LD++;
                            Load_Depo[pos] = (Amount_LD*(OrderLots()*1000)/AccountBalance())*100;
                            CloseTime = OrderCloseTime(); }
            //---------------------------------------------------------------------------------------------------------------------
                     
                  Swap_M     =  OrderSwap();
                  Profit_M   =  OrderProfit();
                  Swap_P     = (OrderSwap()/10)/OrderLots();
                  Profit_P   = (OrderProfit()/10)/OrderLots()+(OrderSwap()/10)/OrderLots();
                     
                  if(OrderType() == OP_BUY || OrderType() == OP_SELL)
                     {   FileWrite(handle,TimeToStr(OrderCloseTime(),TIME_DATE|TIME_MINUTES)+","+DoubleToStr(OrderLots(),2)+"," //3
                                          
                                          +DoubleToStr(OrderSwap(),2)+","+DoubleToStr(Profit_M+Swap_M,2)+","+DoubleToStr(Swap_P,2)+","
                                          +DoubleToStr(Profit_P,2)+","+DoubleToStr(Load_Depo[pos],2)+","
                                          
                                          +DoubleToStr(Source_LP[pos],2)+","+DoubleToStr(LP_01[pos],2)+","+DoubleToStr(LP_02[pos],2)+","
                                          +DoubleToStr(LP_03[pos],2)+","
                                          +DoubleToStr(LP_04[pos],2)+","+DoubleToStr(LP_05[pos],2)+","+DoubleToStr(LP_06[pos],2)+","
                                             
                                          +DoubleToStr(Source_SP[pos],2)+","+DoubleToStr(SP_01[pos],2)+","+DoubleToStr(SP_02[pos],2)+","
                                          +DoubleToStr(SP_03[pos],2)+","
                                          +DoubleToStr(SP_04[pos],2)+","+DoubleToStr(SP_05[pos],2)+","+DoubleToStr(SP_06[pos],2));  } //3
               }  FileClose(handle); //2
         }//1

Infolgedessen wird sie anfangs nicht korrekt berechnet. Die Werte im Array Load_Depo ändern sich ständig, so dass auch offene Positionen berücksichtigt werden müssen. Zeigen Sie mir ein Beispiel, wenn Sie eine freie Minute haben. ))

 
demlin:
Ehrlich gesagt, verstehe ich es nicht, es ist so kompliziert)))
Nicht einmal die Beispiele aus dem Testskript helfen?
 
FreeSerfer:

Danke, der Punkt ist klar, es tut mir leid, dass ich nicht sehr gut mit der Programmiersprache bin.

Angenommen:

Blau - Nummer 0 - Kaufsignal

Rot - Nummer 1 - Verkaufssignal

Und noch eine Frage: Der Pfeil kann blinken, während er einen Balken bildet, über dem er ein Signal geben kann. Die Geschäfte sollten eröffnet werden, nachdem das Signal gebildet wurde.

Kann jemand dies in Code umsetzen?

Lernen Sie das Programmieren oder suchen Sie jemanden, der es für Sie macht?

Victor hat bereits erklärt, dass die Funktion iCustom() verwendet werden sollte. Lesen Sie darüber in der Hilfe von MetaEditor. Sie ist dort recht ausführlich. Um ein "Flattern" zu vermeiden - verwenden Sie in iCustom() die Daten des ersten Balkens anstelle von Null - er ist bereits vollständig gebildet.

Wenn Sie anfangen, selbst etwas zu schreiben, werden Sie froh sein, hier Hilfe und Korrektur zu bekommen...

 
artmedia70:

Möchten Sie programmieren lernen oder suchen Sie jemanden, der es für Sie tut?

Victor hat Ihnen bereits deutlich gemacht, dass Sie die Funktion iCustom() verwenden müssen. Lesen Sie darüber in der Hilfe von MetaEditor. Sie ist dort recht ausführlich. Um das "Geplapper" loszuwerden, verwenden Sie die Daten des ersten Balkens anstelle des Nullbalkens in iCustom() - er ist bereits vollständig gebildet.

Wenn du anfängst, selbst etwas zu schreiben, dann werden sie dir hier gerne helfen und alles korrigieren...

Ich schreibe selbst, obwohl es mir schwer fällt, und das Einzige, was noch fehlt, ist die Bindung des Expert Advisors an den Indikator, obwohl dies dank Victor bald mit meinen eigenen Bemühungen gelöst sein wird. Auf jeden Fall danke ich allen, die mir geantwortet und mir die Richtung gewiesen haben, in der ich vorankommen kann.
 
peshihod:

Es kann unzählige Optionen geben. Am besten ist es, die einfachen zu wählen. Zum Beispiel:


int Orderov;
int Tip;

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
int i,k;

Orderov=OrdersTotal();

for(i=0;i<Orderov;i++)
{
OrderSelect(i,SELECT_BY_POS);

switch( OrderType() )
{
case OP_BUY:
//Задача для ордера типа OP_BUY
break;

case OP_SELL:
//Задача для ордера типа OP_BUY
break;

case OP_BUYLIMIT:
//Задача для ордера типа OP_BUY
break;

/////------ и т.д.




}
}

return(0);
}

Hilfe.... Beantworten Sie die Frage ..............

Dies ist der Teil, der bei jedem Tick ausgelöst wird

case OP_BUY:
//Задача для ордера типа OP_BUY
break;

case OP_SELL:
//Задача для ордера типа OP_BUY
break;


Und sie sollte nur einmal bei jeder neu eröffneten Bestellung ausgelöst werden.

Vielleicht müssen Sie einige Zähler hinzufügen, durch Zecken, Magie oder andere Aufträge Identifikator?

----------------------------------------------------------------------------------------

Müssen wir eine Variable Orderov erstellen?
Kann ich es auf diese Weise tun?

for(i=0;i<OrdersTotal();i++)

Benötigen Sie eine Variable "k" in dem Skript?

int i,k;

 
Zhunko:
Dass selbst die Beispiele aus dem Testskript nicht weiterhelfen?
Danke für das Feedback, ich habe das Problem auf eine andere, einfachere Art und Weise gelöst ))
 
semiromid:

Dies ist der Teil, der bei jedem Tick ausgelöst wird

case OP_BUY:
//Задача для ордера типа OP_BUY
break;

case OP_SELL:
//Задача для ордера типа OP_BUY
break;


Und sie sollte nur einmal bei jeder neu eröffneten Bestellung ausgelöst werden.

Vielleicht sollte es einen Zähler geben, der nach Ticks, Magie oder einer anderen Kennung für die Reihenfolge sortiert ist?

----------------------------------------------------------------------------------------

Müssen wir eine Variable Orderov erstellen?
Können wir es auf diese Weise machen?

for(i=0;i<OrdersTotal();i++)

Das Skript benötigt eine Variable "k" ?

Sie haben das alles falsch verstanden.

Du versuchst, ein Gedicht auf Deutsch zu verfassen, ohne ein Wort zu kennen. Habe ich mich klar ausgedrückt?

Lesen Sie die Referenz, lernen Sie alle Funktionen und Eigenschaften der Sprache kennen. Es wird ein paar Monate dauern. Verwenden Sie die Beispiele, die in der Installation von MetaTrader4 enthalten sind. Dann werden wir reden. Sie wissen noch nicht, wovon wir sprechen.

 
peshihod:

Sie haben das völlig falsch verstanden.

Der Versuch, ein Gedicht auf Deutsch zu verfassen, ohne ein einziges Wort zu kennen. Habe ich mich klar ausgedrückt?

Lesen Sie die Referenz, lernen Sie alle Funktionen und Eigenschaften der Sprache kennen. Es wird ein paar Monate dauern. Verwenden Sie die Beispiele, die in der Installation von MetaTrader4 enthalten sind. Dann werden wir reden. Sie wissen noch nicht, wovon wir sprechen.


Ich bin ein Anfänger in der Programmierung und habe keine Lehrer. Und wenn es Ihnen schwer fällt, die Fragen zu beantworten, die mir wichtig sind, hätten Sie mir auch nichts schreiben können.

Und ich spreche Sie mit "Sie" an, nämlich .....

 
semiromid:


Ich bin ein Anfänger in der Programmierung und habe keine Lehrer. Wenn es Ihnen schwer fällt, die Fragen zu beantworten, die mir wichtig sind, hätten Sie mir auch nichts schreiben können.

Und ich spreche Sie mit "Sie" an, nämlich .....


Es tut mir leid.

Ich habe darüber geschrieben, dass man nicht lernen kann, an Land zu schwimmen.

 
peshihod:


Entschuldigen Sie bitte.

Ich habe darüber geschrieben, dass man nicht lernen kann, an Land zu schwimmen.


Manchmal muss man Fragen stellen, um etwas zu verstehen.

int Orderov;
int Tip;

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
int i,k;

Orderov=OrdersTotal();

for(i=0;i<Orderov;i++)
{
OrderSelect(i,SELECT_BY_POS);

switch( OrderType() )
{
case OP_BUY:
//Задача для ордера типа OP_BUY
break;

case OP_SELL:
//Задача для ордера типа OP_BUY
break;

case OP_BUYLIMIT:
//Задача для ордера типа OP_BUY
break;

/////------ и т.д.




}
}

return(0);
}

Hilfe.... Beantworten Sie die Frage ..............

Dies ist der Teil, der jeden Tick auslöst.

case OP_BUY:
//Задача для ордера типа OP_BUY
break;

case OP_SELL:
//Задача для ордера типа OP_BUY
break;


Sie sollte nur einmal ausgelöst werden, wenn ein neuer Auftrag eröffnet wird.

Vielleicht muss ich einige Zähler, durch Zecken, Magier oder andere Aufträge Identifikatoren, oder vielleicht Arrays anhängen? Ich weiß nicht, was es damit zu tun hat, aber ich kann nicht weitermachen, bis ich es herausgefunden habe.

----------------------------------------------------------------------------------------

Müssen wir eine Variable Orderov erstellen?
Kann ich es auf diese Weise tun?

for(i=0;i<OrdersTotal();i++)

Braucht das Skript eine Variable "k"?

int i,k;