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

 

Nochmals guten Tag!

Ich habe einige Antworten von den beiden guten Leuten bekommen, aber leider funktioniert keine der Optionen.

Ich wiederhole, ich schreibe einen EA und bin in diesem Moment verwirrt:

Ich eröffne immer Aufträge mit einem bestimmten Auftragsschema, und sie können am Eröffnungstag geschlossen werden oder noch 3 Tage auf dem Markt bleiben.

Ich kann nicht herausfinden, wie ich mich registrieren kann, um einen Auftrag zu finden, der seit 3 Tagen aktiv ist, und ihn zu schließen, ohne einen später eröffneten Auftrag zu schließen.

Das Eröffnungsschema ist für alle Aufträge gleich. Ich weise ihnen allen auf folgende Weise Magie zu: Magie_s =Magie_s+1.

Wir brauchen das System, um diesen Auftrag automatisch zu finden und zu schließen, weil wir das System mit historischen Daten testen müssen.

Bitte, wenn jemand weiß, wie man dieses Problem lösen kann - schreiben Sie die Antwort. Ich werde Ihnen sehr dankbar sein :)

 
Boneshapper:

Ich hab's. Ich danke Ihnen vielmals. Das ist eine gute Option, aber ich kann das System nicht mit historischen Daten testen. Also wollte ich es irgendwie automatisch verschreiben. Wenn Sie weitere Vorschläge haben, lassen Sie es mich bitte wissen.
Für die Prüfung der Geschichte sollten wir die Abschlussbedingung bestimmen. Gewinn/Verlust oder Laufzeit der Position, z. B. nicht länger als 3 Tage. Dies kann durch Änderung des Ablaufdatums eines Auftrags/einer Position mit OrderModify erfolgen.
 
paladin80:
Um sie anhand der Historie zu testen, müssen wir die Schlussbedingung der Position bestimmen. Gewinn/Verlust oder Lebensdauer der Position, zum Beispiel nicht länger als 3 Tage. Dies kann durch die Änderung des Verfallsdatums des Auftrags/der Position mit OrderModify erfolgen.

Ja, es stellt sich heraus, dass wir eine enge Bedingung haben werden - es ist die Lebensdauer der Position, in Ordnung, nicht mehr als 3 Tage. Ich habe über OrderModify gelesen, aber ich verstehe es immer noch nicht. Ich werde versuchen, es am Abend zu tun. Nochmals vielen Dank für Ihre Antwort, die sehr prompt kam:)
 

Tut mir leid, es ist nicht in der Sprache, aber ich muss es wirklich wissen, wenn jemand es weiß.

Unter Windows 7 lassen sich einige Dateien nicht öffnen. Ich drücke auf "Öffnen mit...", wähle ein Programm und es erscheint NICHT in der Programmauswahlliste. Weiß jemand, wie man diese Einschränkung aufheben kann? Unter XP war das nicht der Fall. Die verdammten Siebener bringen mich um :(

Ich vermute, dass die Registrierung bereinigt werden muss. Vor allem kann ich nicht auf das FB2-Format doppelklicken. CoolReader laufen lassen und alles ist gut. es öffnet sich. doppelklicken, um das Dateiformat auszuführen, das fb2 nicht will.

Läuft eine Registry-Suche Utillitoy JV-16 (immer verwendet) - gut, es fand so viele Registry-Einträge, die fb2 erwähnen, nur Horror - auch Angst zu töten. Was ist zu tun? Eine Google-Suche hat nichts ergeben :(

 

Grüße!

Helfen Sie mir, den Code neu zu schreiben. Der Code ist nicht neu, aber irgendetwas funktioniert bei mir nicht.

Hier ist der Code:

  *///-----------------Закрытие по истории в безубыток--------------------
   //---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- 
  Iteration = 0; // зануляем инерации перед их учетом в цикле по истории
  Sum_Loss = 0;  // суммарный убыток по этим итерациям

datetime 
Time_at_History_Current = 0,
Time_at_History_Previos = 0;     
 
 if(OrdersHistoryTotal() != 0)
   {
    for(int counter = OrdersHistoryTotal()-1; counter >= 0; counter--)
      {
       OrderSelect(counter, SELECT_BY_POS, MODE_HISTORY);
       if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         {
          if(OrderType() == OP_BUY || OrderType() == OP_SELL)
            {
             if(OrderProfit() < 0) // если убыток по выбранному ордеру, то считаем суммарный и записываем время закрытия ордера
                                   // для последующего его анализа при подсчете количества итераций
                {
                 double lastLoss = OrderProfit();
                 Sum_Loss=Sum_Loss+lastLoss;  // считаем общий убыток по закрытым подряд убыточным ордерам
                 Time_at_History_Current = OrderCloseTime();
                } 
             
             //Print(" Time_at_History_Current_в цикле = ", TimeToStr(Time_at_History_Current, TIME_DATE|TIME_SECONDS));
             //Print(" Time_at_History_Previos_в цикле = ", TimeToStr(Time_at_History_Previos, TIME_DATE|TIME_SECONDS));
             
             if(Time_at_History_Current != Time_at_History_Previos) // если они не равны, то считаем итерации и делаем их равными
               {
                Time_at_History_Previos = Time_at_History_Current ;
                Iteration++;
                //Print("Iteration at History в условии сравнения  = ",  Iteration);
               }   
             else // они равны, то проверяем, дополнительно, наличие профита по выбранному следующему ордеру и выходим из цикла
               {
                if(OrderProfit() >= 0)
                  break;
               }
            }
         }
      }
   }

if (Sum_Loss < 0.0) { // Имеем убыток по закрытым позам
  if (((AccountEquity() + Sum_Loss + (Sum_Loss * 0.25)) >= AccountBalance()) && (((totalSell > 0) && (totalBuy < 1)) || ((totalSell < 1) && (totalBuy > 0)))) { // Достигли безубытка
    // Здесь какой-то код, который необходимо выполнить при достижении безубытка
        CloseAllBuy();
           CloseAllSell();
           Sum_Loss = 0.0;
           
  
  }
}
//-----------------------------------------------------------------

Ich habe mein Bestes getan, um eine Schleife zu öffnen, wenn ein Minusgeschäft abgeschlossen ist, und nach einem positiven Geschäft, wenn ich ein Minusgeschäft hatte, würde ich meinen Minussaldo um den Gewinn des letzten geschlossenen Auftrags verringern, der höher als Null ist. Das heißt, wenn der Auftrag in einem Minus geschlossen hat, beginnen wir zu arbeiten, wenn die folgende Transaktion im Gewinn mehr als ein Verlust ist, schließen wir, wenn auf die folgende Transaktion in plus geschlossen haben, aber dieses Plus nicht ein Minus übersteigt, auf die früheren Aufträge, dieses Plus aus einem negativen Saldo, und der folgende Auftrag wird mit neuen Indikatoren, die bereits weniger ist, verglichen, wie wir vor in einem Minus geschlossen haben. Wir sind dabei, das Schleppnetz zu schließen, deshalb haben wir eine positive Bilanz.

 
drknn:

Tut mir leid, es ist nicht in der Sprache, aber ich muss es wirklich wissen, wenn jemand es weiß.

Unter Windows 7 lassen sich einige Dateien nicht öffnen. Ich drücke auf "Öffnen mit...", wähle ein Programm und es erscheint NICHT in der Programmauswahlliste. Weiß jemand, wie man diese Einschränkung aufheben kann? Unter XP war das nicht der Fall. Die verdammten Siebener bringen mich um :(

Ich vermute, dass die Registrierung bereinigt werden muss. Vor allem kann ich nicht auf das FB2-Format doppelklicken. CoolReader laufen lassen und alles ist gut. es öffnet sich. doppelklicken, um das Dateiformat auszuführen, das fb2 nicht will.

Läuft eine Registry-Suche Utillitoy JV-16 (immer verwendet) - gut, es fand so viele Registry-Einträge, die fb2 erwähnen, nur Horror - auch Angst zu töten. Was ist zu tun? Eine Google-Suche hat nichts ergeben :(


Start - Alle Programme - Standardprogramme - Zuordnungen festlegen
 
drknn:

Tut mir leid, es ist nicht in der Sprache, aber ich muss es wirklich wissen, wenn jemand es weiß.

Unter Windows 7 lassen sich einige Dateien nicht öffnen. Ich drücke auf "Öffnen mit...", wähle ein Programm und es erscheint NICHT in der Programmauswahlliste. Weiß jemand, wie man diese Einschränkung aufheben kann? Unter XP war das nicht der Fall. Die verdammten Siebener bringen mich um :(

Ich vermute, dass die Registrierung bereinigt werden muss. Vor allem kann ich nicht auf das FB2-Format doppelklicken. CoolReader laufen lassen und alles ist gut. es öffnet sich. doppelklicken, um das Dateiformat auszuführen, das fb2 nicht will.

Läuft eine Registry-Suche Utillitoy JV-16 (immer verwendet) - gut, es fand so viele Registry-Einträge, die fb2 erwähnen, nur Horror - auch Angst zu töten. Was ist zu tun? Eine Google-Suche hat nichts ergeben :(

http://rhpc.ru/topic/200/
 

Leute...Hilfe wer weiß!!!!


Das Wesentliche der Strategie: Einstieg durch Stochastik (5,14,3), Ausstieg ebenfalls durch Stochastik, aber mit einer anderen Periode (5,3,3). Ich verstehe nicht, wie man einen Ausstieg durch die Stochastik und nicht durch ein umgekehrtes Signal vornehmen kann.
Ich habe ein Problem und ich habe keine Ahnung, wie es gelöst werden kann, ich werde versuchen, zu erklären.
In dem Code, den ich gepostet habe, gibt es also 2 Funktionen
//+------------------------------------------------------------------+
//| Array von Tickets zum Schließen vorbereiten |
//+------------------------------------------------------------------+
void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9])
{
int size=ArrayRange(arrayTickets,0);
//----
if (size==0) return;

int i,type,ticket,closeSize;
for (i=0;i<size;i++)
{
type=arrayTickets[i][1];
// wenn der Auftragstyp kein Marktauftrag ist, dann übergehen
if (type>OP_SELL) continue;

if (Reverses) // flip the market order type
{
if (type==OP_BUY) type=OP_SELL; else type=OP_BUY;
}

// hier entscheiden wir für jede offene Order über ihr Schicksal
// sie im Markt belassen oder bei Schließung zum Array hinzufügen
if (type==OP_BUY)
{
//
// Code, der es erlaubt, den Kauf zu verlassen

// als Beispiel
if (signal==OP_BUY) continue;
}

if (type==OP_SELL)
{
//
// Code, der es erlaubt, weiter zu verkaufen

//als Beispiel
if (signal==OP_SELL) continue;
}


closeSize=ArrayRange(ticketsClose,0);
ArrayResize(ticketsClose,closeSize+1);
ArrayResize(ticketsClose,closeSize+1);
ticketsClose[closeSize][0] = arrayTickets[i][0]; // ticket #
ticketsClose[closeSize][1] = arrayTickets[i][1] // Auftragstyp

// hier wird angegeben, wie viele Lots geschlossen werden sollen
lots[closeSize] = arrayTickets[i][2]; // zu schließendes Volumen
// es ist möglich, teilweise zu schließen, dann muss die Zeile oben umgeschrieben werden
}
//----
return;
}

//+------------------------------------------------------------------+
//| Schließt Aufträge mit angegebenen Tickets |
//+------------------------------------------------------------------+
void CloseMarketOrders(int ticketsArray[][2], double lotsArray[])
{
//----
int i,size=ArrayRange(ticketsArray,0);
if (size==0) return;

int ticket,type;
double lots;
bool res;

int total=OrdersTotal();

for (i=0;i<size;i++)
{
ticket = ticketsArray[i][0];
type = ticketsArray[i][1];
lots = lotsArray[i];
RefreshRates(); // nur für den Fall, dass das Marktumfeld aktualisiert wird

// Kaufabschlussblock
if (type==OP_BUY)
{
res = OrderClose(ticket,lots,Bid,Slippage,Orange);
if (!res)
{
Print("Failed to close order to buy #",ticket,"! Error #",GetLastError());
// weitere Fehlerbehandlung, selbst schreiben
}
}

// Verkaufsabschlussblock
if (type==OP_SELL)
{
res = OrderClose(ticket,lots,Ask,Slippage,Orange);
if (!res)
{
Print("Failed to close sell order #",ticket,"! Fehler #",GetLastError());
// weitere Fehlerbehandlung, selbst schreiben
}
}

}
//----
return;
}

Die Funktion void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9]) muss eine Bedingung übergeben, um zu entscheiden, ob die Bestellung geschlossen werden soll oder nicht...
Ich habe versucht, Bedingungen zu stellen, aber nichts funktioniert....
Kann jemand nachsehen, ob es einen Fehler in diesen Funktionen gibt oder ob ich es vermasselt habe....
Dateien:
osc_test.mq4  37 kb
 
Kann das Gebot in einem Tickstream gleich 0 sein? (manchmal) während einer Handelssitzung
 
tara:

Start - Alle Programme - Standardprogramme - Zuordnungen festlegen

Dieser Vorgang führt zu einem Programmauswahlfenster. Geben Sie ein Programm an, und es erscheint nicht dort.
Grund der Beschwerde: