[ARCHIV]Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Ohne dich kann ich nirgendwo hingehen - 5. - Seite 397

 
lottamer:

Ehrlich gesagt, hatte ich die Idee, OR durch AND.... zu ersetzen, aber ... :)))))))))))))))))))))

Danke! Jetzt verstehe ich die Logik, obwohl ich, um 15 geschlossene zu zählen, den Code auf die Größe eines Ballons aufblasen muss!

Kann man das Ganze in eine Schleife packen und nur den Parameter für die Anzahl der benötigten N Trades ersetzen?

Hier ist eine der Möglichkeiten, nach den N zuletzt geschlossenen Aufträgen zu suchen, wobei die gesuchten Aufträge nach Typ (KAUFEN, VERKAUFEN) und Rentabilität (verlustbringend, rentabel) gefiltert werden können:

//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY, taras_bulba@tut.by                                              |
//+-----------------------------------------------------------------------------------+
//|        Функция получает Ticket следующего перед fdt_Time закрытого ордера         |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
int fGet_TicketLastClosePos (int fi_Type = -2,          // OrderType()
                             int fi_TypeProfit = 0,     // флаг профитности ордеров: 0 - все, -1 - убыточные, 1 - прибыльные
                             datetime fdt_Time = 0)     // Точка отсчёта времени
{
    datetime ldt_CloseTime = 0, ldt_LastTime = 0;
    double   ld_Profit = 0.;
    int      li_Ticket = 0, li_Total = OrdersHistoryTotal();
//----
    for (int li_ORD = li_Total - 1; li_ORD >= 0; li_ORD--)
    {
        //if (!fCheck_MyOrders (li_ORD, fi_Type, MODE_HISTORY)) continue;
        // Здесь прописываете свою фильтрацию ордеров
        ldt_CloseTime = OrderCloseTime();
        //---- Пропускаем ордера, закрытые после указанной даты
        if (fdt_Time != 0) if (fdt_Time <= ldt_CloseTime) continue;
        if (ldt_LastTime >= ldt_CloseTime) continue;
        ld_Profit = OrderProfit();
        //---- Фильтруем ордера по профитности
        if (fi_TypeProfit > 0) if (ld_Profit < 0.) continue;
        if (fi_TypeProfit < 0) if (ld_Profit > 0.) continue;
        ldt_LastTime = ldt_CloseTime;
        li_Ticket = OrderTicket();
    }
//----
    return (li_Ticket);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY, taras_bulba@tut.by                                              |
//+-----------------------------------------------------------------------------------+
//|        Функция получает Tickets N закрытых ордеров                                |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
int fGet_TicketsLastCloseOrd (int fi_NUM,                // Количество искомых тикетов
                              int& ar_Tickets[],         // возвращаемый массив с тикетами
                              int fi_Type = -2,          // OrderType()
                              int fi_TypeProfit = 0)     // флаг профитности ордеров: 0 - все, -1 - убыточные, 1 - прибыльные
{
    int      li_cnt = 0, li_Ticket;
    datetime ldt_Time = 0;
//----
    for (int li_IND = 0; li_IND < fi_NUM; li_IND++)
    {
        li_Ticket = fGet_TicketLastClosePos (fi_Type, fi_TypeProfit, ldt_Time);
        if (li_Ticket > 0)
        {
            li_cnt++;
            ArrayResize (ar_Tickets, li_cnt);
            ar_Tickets[li_cnt-1] = li_Ticket;
            OrderSelect (li_Ticket, SELECT_BY_TICKET);
            ldt_Time = OrderCloseTime();
        }
        else break;
    }
//----
    return (li_cnt);
}

Nachdem die Funktion fGet_TicketsLastCloseOrd() aufgerufen wurde und die Anzahl der gefundenen Tickets entsprechend den angegebenen Parametern zurückgibt, können Sie (ich würde es tun) die angegebene Anzahl der Tickets (fi_NUM) mit dem von der Funktion zurückgegebenen Wert vergleichen. Alle gesammelten Tickets werden in einem Array gespeichert, das der Funktion als Referenz übergeben wird.

Und bei dieser Variante ist es nicht wichtig, wie viele dieser letzten Tickets gesucht werden. :)

Und wenn Sie mit diesen letzten abgeschlossenen Aufträgen Gewinne erzielen wollen, ist es sogar noch einfacher:

//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY, taras_bulba@tut.by                                              |
//+-----------------------------------------------------------------------------------+
//|        Функция получает Profit N последних закрытых ордеров                       |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
double fGet_ProfitLastCloseOrd (int fi_NUM,          // Количество просчитываемых ордеров
                                int fi_Type = -2)    // OrderType()
{
    int      li_Ticket;
    double   ld_Profit = 0.;
    datetime ldt_Time = 0;
//----
    for (int li_IND = 0; li_IND < fi_NUM; li_IND++)
    {
        li_Ticket = fGet_TicketLastClosePos (fi_Type, 0, ldt_Time);
        if (li_Ticket > 0)
        {
            OrderSelect (li_Ticket, SELECT_BY_TICKET);
            ldt_Time = OrderCloseTime();
            ld_Profit += (OrderProfit() + OrderSwap() + OrderCommission());
        }
        else break;
    }
//----
    return (ld_Profit);
}
 
TarasBY:

Hier ist eine der Möglichkeiten, nach N Tickets der letzten geschlossenen Aufträge zu suchen, und Sie können Aufträge nach Typ (KAUFEN, VERKAUFEN) und nach Rentabilität (verlustbringend, rentabel) filtern:

Nachdem die Funktion fGet_TicketsLastCloseOrd() aufgerufen wurde und die Anzahl der gefundenen Tickets entsprechend den angegebenen Parametern zurückgibt, können Sie (ich würde es tun) die angegebene Anzahl der Tickets (fi_NUM) mit dem von der Funktion zurückgegebenen Wert vergleichen. Alle gesammelten Tickets werden in einem Array gespeichert, das der Funktion als Referenz übergeben wird.

Und bei dieser Variante ist es nicht wichtig, wie viele dieser letzten Tickets gesucht werden. :)

Und wenn Sie mit diesen letzten abgeschlossenen Aufträgen Gewinne erzielen wollen, ist es sogar noch einfacher:



Vielen Dank. Ich werde eine Pause machen, ich muss herausfinden, was was ist...
 
Hallo, helfen Sie mir, dieses Problem zu lösen: Ich möchte, dass ein Indikator Eurobucks, Dollar-Index und Euro-Index anzeigt, aber ihre Werte sind durch mehrere Aufträge unterschiedlich. Wie kann ich sie auf Werte der gleichen Ordnung bringen? Fügen Sie einfach Multiplikatoren hinzu - ich glaube, das entspricht nicht meinem Geschmack...
 
tommy27:
Hallo, helfen Sie mir, dieses Problem zu lösen: Ich möchte, dass ein Indikator Eurobucks, Dollar-Index und Euro-Index anzeigt, aber ihre Werte sind durch mehrere Aufträge unterschiedlich. Wie kann ich sie auf Werte der gleichen Ordnung bringen? Ich denke, es ist nicht machbar, Multiplikatoren hinzuzufügen...

Minimal- und Maximalwerte aller Indikatoren auf denselben Wert setzen
 

Guten Tag an Sie, mein Rat an einen Profi: Ich habe einen Indikator geschrieben, dessen Signale ich in meinem EA verwenden möchte. Was wird schneller funktionieren, die Indikatorfunktion oder der übertragene Indikator?

Danke

 
pako:

Min. und Max. für alle Indikatoren auf denselben Wert setzen

Welche... Ich möchte, dass all dies von einem Indikator für 3 Pufferlinien angezeigt wird.
 

tommy27:

Wie bringt man sie zu Werten derselben Ordnung?

die Skala muss die gleiche sein
 
pako:
die Skala sollte dieselbe sein

Ja, und dazu ist es sinnvoll, alle drei Pufferwerte zu konvertieren, bevor man sie so anzeigt:

Xn=(X-Xmin)/(Xmax-Xmin)

Wenn Sie das stumpfsinnig tun, erhalten Sie etwas, das wie eine horizontale Linie aussieht.

Nun, wenn Sie die Skalierung von MQ verwenden, sind Sie gut dran.

 
Danke, ich werde es ausprobieren.
 
Zhunko:
Wenn es dazu kommt, dann nicht bald, vielleicht nie.

Vielen Dank für die Antwort.

Aber ich verwende denselben verdächtigen Vergleich schon seit langem in anderem Code.

Und es funktioniert erfolgreich.

int start()                                                                                                                     
{                                                                                                                       
                                                                                                                        
 double Price=iOpen (Symbol (),0,0);                                                                                                                            
 int last_order_bar = 0;                                                                                                                        
 int ot = OrdersTotal();                                                                                                                        
                                                                                                                        
 if (ot>0) //если есть ордера в рынке                                                                                                                   
 {                                                                                                                      
   if (OrderSelect (ot-1,SELECT_BY_POS))                                                                                                                        
      if (OrderType ()==OP_BUY || OrderType ()==OP_SELL )                                                                                                                       
         last_order_bar = iBarShift (Symbol (),0,OrderOpenTime ());                                                                                                             
 }                                                                                                                      
                                                                                                                        
 int last_hist_order_bar = 0;                                                                                                                   
 int oht = OrdersHistoryTotal();                                                                                                                        
                                                                                                                        
 if (oht>0)                                                                                                                     
 {                                                                                                                      
   if (OrderSelect (oht-1,SELECT_BY_POS, MODE_HISTORY))                                                                                                                         
      if (OrderType ()==OP_BUY || OrderType ()==OP_SELL)                                                                                                                        
         last_hist_order_bar = iBarShift (Symbol (),0,OrderOpenTime ());                                                                                                        
 }                                                                                                                      
                                                                                                                        
 if (ot==0 || last_order_bar>0)                                                                                                                      
    if (oht==0 || last_hist_order_bar>0) 
//===============================================================
if(Bid==Price)
if((Minute( ) ==45)&&(Minute( ) <50))
int Ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,1,Bid-1500*Point,Bid+150*Point,"jfh",123 );        
                                                                                        
}                                                                                                                       
return;
Ich verstehe nicht, warum diese Bedingung im letzten Fall nicht funktioniert. Ich sehe keine grundlegenden Unterschiede zwischen diesen Codes.