[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 449
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Ich verstehe, dass ich nicht spekulieren möchte, aber können Sie mir wenigstens einen Hinweis geben, wenn das Problem für Sie klar ist?
Gib mir den ganzen Code
Nein, es bedeutet nur, dass die Daten mit einem Teil der Geschichte übereinstimmen.
Sie könnten sie zum Beispiel manuell eingeben. Oder aus einer Textdatei geschrieben. Oder Sie könnten sie aus einer Berechnung erhalten haben.
Denn selbst bei der Eingabe einiger bedingter Daten "1,25 1,16 1,73 1,35" können wir die Geschichte für eine Währung vor vielen Jahren erhalten. Das bedeutet aber nicht, dass wir eine Zeitreihe eingerichtet haben
Das ursprüngliche Skript wurde ein wenig überarbeitet:
1. Ich habe nur die 5 letzten Eröffnungspreise in das benutzerdefinierte Array kopiert.
2. Berechnet das erhaltene benutzerdefinierte Array durch alle 5 kopierten Eröffnungspreise.
Hier ist, was ich bekommen habe:
Wie Sie aus der Abbildung ersehen können, sind die Eröffnungskurse in umgekehrter Reihenfolge indiziert (wie aus der ANZAHL der Eröffnungskurse (in aufsteigender Reihenfolge) und der ZEIT der Eröffnungskurse (in absteigender Reihenfolge) hervorgeht), d.h. das Array ist als Array-Zeitreihe organisiert.
Aber die Funktion ArrayGetAsSeries gibt trotzdem 0 (false) zurück, was bedeutet, dass das Benutzer-Array NICHT als Array-Zeitreihe organisiert ist.
Ich bitte um Klarheit
Frage: Wie lässt sich dies erklären?
P.S. Danke für die Beantwortung meiner Fragen
Das ursprüngliche Skript wurde ein wenig überarbeitet:
1. Ich habe nur die letzten 5 Eröffnungspreise in ein benutzerdefiniertes Array kopiert.
2. Ras verarbeitete das resultierende benutzerdefinierte Array nach allen 5 kopierten Eröffnungspreisen.
Hier ist, was ich bekommen habe:
Wie Sie aus der Abbildung ersehen können, sind die Eröffnungskurse in umgekehrter Reihenfolge indiziert (wie aus der ANZAHL der Eröffnungskurse (in aufsteigender Reihenfolge) und der ZEIT der Eröffnungskurse (in absteigender Reihenfolge) hervorgeht), d.h. das Array ist als Array-Zeitreihe organisiert.
Aber die Funktion ArrayGetAsSeries gibt trotzdem 0 (false) zurück, was bedeutet, dass das Benutzer-Array NICHT als Array-Zeitreihe organisiert ist.
Bitte klären
Frage: Wie ist das zu erklären?
P.S. Ich danke Ihnen für die Beantwortung meiner Fragen.
Haben Sie versucht, die Funktionen
Haben Sie die folgenden Funktionen ausprobiert
i_maTF == Zeitraum() ??????
i_maPeriod nimmt einen vernünftigen Wert an???
Vielleicht ist etwas mit i_maShiftByPrice nicht in Ordnung?
Es ist schwer, das genauer zu sagen.
Die von ihm ausgegebenen Informationen sind nicht korrekt. Hier ist der vollständige Code:
Das Protokoll des Expert Advisors zeigt dies an:
Wie Sie sehen können, sind die Variablen i_maTF, i_maPeriod und i_maPrice nicht das, was ich initialisiert habe. Was ist los?
Gibt die falschen Informationen aus. Hier ist der vollständige Code:
Das Expertenprotokoll zeigt dies:
Wie Sie sehen können, sind die Variablen i_maTF, i_maPeriod und i_maPrice nicht dieselben, die ich initialisiert habe. Was ist los?
Ich frage mich, wie Sie es geschafft haben, etwas in das Protokoll zu bekommen, wenn der Code, den Sie eingereicht haben, nicht kompiliert werden kann?
Ah, wenn Sie es kompilieren, wird es keine Probleme geben.
Ich frage mich, wie Sie es geschafft haben, irgendetwas in das Protokoll zu bekommen, wenn der von Ihnen präsentierte Code nicht kompiliert werden kann?
Ah, wenn Sie es kompilieren, werden Sie keine Merkwürdigkeiten bekommen.
Ich kompiliere immer normal.
Ich habe den Code um zusätzliche Drucker und Variablen bereinigt, um niemanden zu verwirren. Aber ich habe sie unten nicht entfernt, so dass es nicht kompiliert werden konnte. Hier ist der vollständige Code, der sich kompilieren lässt:
Bitte um Hilfe! Wie kann man einen EA dazu bringen, eine alte Bestellung zu schließen, wenn man eine neue eröffnet? In der Strategie-Tester es funktioniert gut, aber auf dem realen Konto aus irgendeinem Grund, wenn ich eine neue öffnen, die alte verlässt???????? Ich bin eine totale Null im Programmieren(((
//ooooooooooooooooooooooooooooooooooooooooooooooooo
extern bool In_BUY=true;
extern int SL_buy=62; //---входные параметры по лонгам
extern int Risk_buy=0;
//ooooooooooooooooooooooooooooooooooooooooooooooooo
extern bool In_SELL=true;
extern int SL_sell=62; //---входные параметры по шортам
extern int Risk_sell=0;
//ooooooooooooooooooooooooooooooooooooooooooooooooo
//---- other parameters
static int prevtime=0;
int ticket=0;
int x=1;
//----------------------------------------------
int Magic_BUY =123;
int Magic_SELL =321;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
if(Digits == 5) x=10;
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//oooooooooooooooooooooooooooooooooooooooooooooooooooo
if (Time[0] == prevtime) return(0);
prevtime = Time[0];
if (!IsTradeAllowed()) {
prevtime=Time[1]; MathSrand(TimeCurrent());Sleep(30000 + MathRand()); //--- формировка бара---
}
//ooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
Trade( Magic_BUY, In_BUY,Ask,0,2, SL_buy, Risk_buy); //---торговля по лонгам
Trade(Magic_SELL,In_SELL,Bid,2,0, SL_sell,Risk_sell); //---торговля по шортам
//ooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
return(0);//-----------выход из стартовой функции------------
}
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
void Trade(int mn,bool flag,double price,int period_1,int period_2,int sl,int Risk) {
int total=OrdersTotal();
for (int i = 0; i < total; i++) { OrderSelect(i, SELECT_BY_POS, MODE_TRADES);//---проход по ордерам--
if (OrderSymbol() == Symbol() && OrderMagicNumber() == mn) {
if(Open[period_2]>Open[period_1]) { //----условие закрытия ордера---------
OrderClose(OrderTicket(),OrderLots(),price,5*x); RefreshRates();
}
return(0);
}
}
//ooooooooooooooooooooooooooooooooooooooooooooooooooo
ticket = -1;
if ( flag &&
Open[period_1]>Open[period_2] && //----вход в рынок по условию---
OrdersTotal()<2 && //-----ограничения чемпионата------
AccountEquity()>200 &&
IsTradeAllowed()) {
if (mn<200) {
ticket= OrderSend(Symbol(), OP_BUY,lot(Risk_buy),Ask,5,Bid-x*sl*Point,0,DoubleToStr(mn,0),mn,0,Blue);
}
else {
ticket= OrderSend(Symbol(),OP_SELL,lot(Risk_sell),Bid,5,Ask+x*sl*Point,0,DoubleToStr(mn,0),mn,0, Red);
}
RefreshRates();
if ( ticket < 0) { Sleep(30000); prevtime = Time[1]; }
} //-- Exit ---
return(0); }
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
double lot(int R) { if (R<0)R=0; if (R>80)R=80; //------корректность ввода -------
double minlot = MarketInfo(Symbol(), MODE_MINLOT);
int o = MathAbs(MathLog(minlot) *0.4343) + 0.5;
double lot = minlot;
//ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
lot = NormalizeDouble(AccountFreeMargin() * 0.00001*R, o);//---
if (AccountFreeMargin() < lot * MarketInfo(Symbol(), MODE_MARGINREQUIRED)) {
lot = NormalizeDouble(AccountFreeMargin() / MarketInfo(Symbol(), MODE_MARGINREQUIRED), o);
}
//ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
if(lot < minlot) lot = minlot;
double maxlot =MarketInfo(Symbol(), MODE_MAXLOT);
if(lot > maxlot) lot = maxlot;
return(lot); }
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_end_film_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Oder vielleicht schreiben Sie eine andere EA, die auf dem Prinzip der 1 hat geöffnet, 2 hat geöffnet-1 hat geschlossen, 3Opened-2 hat geschlossen, usw. arbeiten würde. Wir brauchen dringend Hilfe!!!
Bitte um Hilfe! Wie kann man einen EA dazu bringen, eine alte Bestellung zu schließen, wenn man eine neue eröffnet? In der Strategie-Tester es funktioniert gut, aber auf dem realen Konto aus irgendeinem Grund, wenn ich eine neue öffnen, die alte verlässt???????? Ich habe überhaupt keine Ahnung vom Programmieren((!
//ooooooooooooooooooooooooooooooooooooooooooooooooo
extern bool In_BUY=true;
extern int SL_buy=62; //---входные параметры по лонгам
extern int Risk_buy=0;
Ersetzen Sie
zu
Mein Ziel in diesem Stadium ist es, zu verstehen, wie diese oder jene Funktion funktioniert, und in diesem speziellen Fall, wie die Funktion ArrayGetAsSeries funktioniert. Ich verstehe, dass Sie die Funktion ArraySetAsSeries mit dem Parameter set=true verwenden können , der die Indizierung zwangsweise festlegt, wie in array-timeseries. Aber ich möchte verstehen, warum in meinem Fall Funktion ArrayGetAsSeries 0 zurückgegeben, trotz Array sieht aus wie Zeitreihen (d.h. indiziert wie Zeitreihen)
Eben weil sie nur als Zeitreihe ERKLÄRT.
Dies ist nur Ihre persönliche Meinung. Und wenn man dort die Zahlen 1, 2, 1.2, 2.1 einträgt, erhält man eine Zeitreihe für Schweinefleisch von 1927 (die Zahlen sind bedingt). Dies macht das Array jedoch nicht zu einer Zeitreihe - Sie müssen es explizit mit der Funktion