void OnTick()
{
......здесь работаем с закрытием (тралом и прочим)....
if (Hour()>=10&&Hour()<11) return (0);
......остальной код, в частности для открытия....
}
выдает ошибку: 'return' - 'void' function returns a value
Vitaly Muzichenko:
voidOnTick()
{
......здесь работаем с закрытием (тралом и прочим)....
if (Hour()>=10 && Hour()<11) return;
......остальной код, в частности для открытия....
}
Hallo, was ist mit OrdersTotal()? Ich wusste immer, dass es die Anzahl der Aufträge -1 enthält, d.h. OrdersTotal()-1 und alles funktionierte, aber ich begann ein Programm zu schreiben und plötzlich wird ein Auftrag nicht mehr gezählt, ich fragte nach OrdersTotal() und es gab mir die Gesamtzahl der Aufträge = 3, statt 3-1. Was passiert?
Die übliche Form der Schleife in der Hilfe:
int total=OrdersTotal(); for(int pos=0;pos<total;pos++) { }
Das heißt, die erste Ordnung ist gleich Null.
Aber nein, in Wirklichkeit ist die erste Ordnung 1, was bedeutet, dass wir die Suche bei 1 und nicht bei Null beginnen sollten? Haben die Metaquotes etwas falsch gemacht oder bin ich dumm?
Не следует путать между собой действующие отложенные ордера и позиции, которые также отображаются на вкладке "Торговля" в панели "Инструменты". Ордер – это распоряжение на проведение торговой операции, а позиция является результатом одной или нескольких сделок.
Maksim Mihajlov: Hallo, was ist mit OrdersTotal() los? Ich wusste immer, dass es die Anzahl der Aufträge -1 enthält, d.h. OrdersTotal()-1, und alles hat funktioniert, aber ich habe angefangen, ein Programm zu schreiben, und plötzlich wird ein Auftrag nicht gezählt. Ich habe nach OrdersTotal() gefragt, und es sagt, dass die Gesamtzahl der Aufträge = 3 ist, anstatt 3-1. Was passiert?
Die übliche Form der Schleife in der Hilfe:
int total=OrdersTotal(); for(int pos=0;pos<total;pos++) { }
Das heißt, die erste Ordnung ist gleich Null.
Aber nein, in Wirklichkeit ist die erste Ordnung 1, was bedeutet, dass wir die Suche bei 1 und nicht bei Null beginnen sollten? Haben die Metaquotes etwas falsch gemacht, oder bin ich dumm?
Sie haben die Begriffe VERBINDLICHE ANORDNUNGEN und GIFT verwechselt. Lesen Sie die Referenz. Seien Sie genauer in Ihrer Frage: Was versuchen Sie zu zählen: ENTFERNTE AUFTRAGSSTELLUNGEN oder POSITIONEN? Und ja, es hat sich nichts geändert - der Index des ersten Elements beginnt mit "0".
Sie haben die RELATED ORDERS und die POSITIONS verwechselt. Lesen Sie die Referenz. Formulieren Sie Ihre Frage genauer: Was wollen Sie zählen: RETIRED ORDERS oder POSITIONS? Und ja, es hat sich nichts geändert - der Index des ersten Elements beginnt mit "0".
Ich meine MQL4, nicht MQL5, da gibt es keine Unterteilung in Pending und Market Pending!
Sie schreiben im MQl5-Forum. Sie schreiben im Hauptteil. Sie posten im MQL5-Forum - und Sie erhalten Antworten zu MQL5.
Fragen zum alten Terminal sind an den speziellen Abschnitt gerichtet: MQL4 und MetaTrader 4. Schreiben Sie von nun an dort. Ich werde Ihre Fragen an sie weiterleiten.
Ich habe zwei Varianten verglichen, in der ersten habe ich OrdersTotal()-1 verwendet und die Suche bei Null begonnen - ich bekam den Fehler . In der zweiten Variante habe ich bei Eins begonnen und die gesamte OrdersTotal() genommen - diesmal kein Fehler
In den Screenshots können Sie sehen, dass OrdersTotal() die tatsächliche Anzahl der Aufträge anzeigt, nicht OrdersTotal()-1...
Die Frage ist, warum OrdersTotal() zeigt die tatsächliche Anzahl der Aufträge, anstatt -1, sollte es so sein, oder es ist etwas Neues? Denn in diesem Fall sollten wir die Suche nicht bei Null, sondern bei Eins beginnen!
Ich habe zwei Varianten verglichen, in der ersten habe ich OrdersTotal()-1 verwendet und die Suche bei Null begonnen - ich bekam den Fehler . In der zweiten Variante habe ich bei Eins begonnen und die gesamte OrdersTotal() genommen - diesmal kein Fehler
In den Screenshots können Sie sehen, dass OrdersTotal() die tatsächliche Anzahl der Aufträge anzeigt, nicht OrdersTotal()-1...
Die Frage ist, warum OrdersTotal() zeigt die tatsächliche Anzahl der Aufträge, anstatt -1, sollte es so sein, oder es ist etwas Neues? Denn in diesem Fall sollten wir die Suche nicht bei Null, sondern bei Eins beginnen!
Ich denke, ich habe meinen Fehler verstanden, sorry... In dieser Bedingung gibt es einen Offset von -1: if (OrderSelect(i-1,SELECT_BY_POS)==true){} Entschuldigung, dass ich so unverblümt bin, ich habe den String aus einem anderen Programm übernommen und nicht auf den Offset geachtet!
Hallo. Ich brauche Ihre Hilfe, um den Indikator zu korrigieren. Das Wesen des Indikators ist wie folgt. Berechnen Sie das Ausmaß des Preisanstiegs im Vergleich zum vorherigen Balken. Für Null nimmt einen Stern bar. Das heißt, der Eröffnungskurs ist gleich dem Schlusskurs. Beim Kompilieren keine Fehler, aber beim Testen ein Fehler in der Zeile 80 20 Zeichen. Auch dieSignalleitung istfalsch gezeichnet. Aber ich denke, das ist der Grund für die falsche Berechnung des Hauptpuffers. Bitte helfen Sie mir, das Problem zu beheben.
Некоторые технические индикаторы имеют несколько отрисовываемых на графике буферов. Нумерация индикаторных буферов начинается с 0. При копировании значений индикатора функцией CopyBuffer() в массив типа double для некоторых индикаторов можно указывать не номер копируемого буфера, а идентификатор этого буфера.
Ich wusste immer, dass es die Anzahl der Aufträge -1 enthält, d.h. OrdersTotal()-1 und alles funktionierte, aber ich begann ein Programm zu schreiben und plötzlich wird ein Auftrag nicht mehr gezählt, ich fragte nach OrdersTotal() und es gab mir die Gesamtzahl der Aufträge = 3, statt 3-1.
Was passiert?
Die übliche Form der Schleife in der Hilfe:
int total=OrdersTotal();
for(int pos=0;pos<total;pos++)
{
}
Das heißt, die erste Ordnung ist gleich Null.
Aber nein, in Wirklichkeit ist die erste Ordnung 1, was bedeutet, dass wir die Suche bei 1 und nicht bei Null beginnen sollten?
Haben die Metaquotes etwas falsch gemacht oder bin ich dumm?
Hallo, was ist mit OrdersTotal() los?
Ich wusste immer, dass es die Anzahl der Aufträge -1 enthält, d.h. OrdersTotal()-1, und alles hat funktioniert, aber ich habe angefangen, ein Programm zu schreiben, und plötzlich wird ein Auftrag nicht gezählt. Ich habe nach OrdersTotal() gefragt, und es sagt, dass die Gesamtzahl der Aufträge = 3 ist, anstatt 3-1.
Was passiert?
Die übliche Form der Schleife in der Hilfe:
int total=OrdersTotal();
for(int pos=0;pos<total;pos++)
{
}
Das heißt, die erste Ordnung ist gleich Null.
Aber nein, in Wirklichkeit ist die erste Ordnung 1, was bedeutet, dass wir die Suche bei 1 und nicht bei Null beginnen sollten?
Haben die Metaquotes etwas falsch gemacht, oder bin ich dumm?
Sie haben die Begriffe VERBINDLICHE ANORDNUNGEN und GIFT verwechselt. Lesen Sie die Referenz. Seien Sie genauer in Ihrer Frage: Was versuchen Sie zu zählen: ENTFERNTE AUFTRAGSSTELLUNGEN oder POSITIONEN? Und ja, es hat sich nichts geändert - der Index des ersten Elements beginnt mit "0".
Hinzugefügt: Beispiel
Beispiel: Berechnung von Positionen und schwebenden Aufträgen
Sie haben die RELATED ORDERS und die POSITIONS verwechselt. Lesen Sie die Referenz. Formulieren Sie Ihre Frage genauer: Was wollen Sie zählen: RETIRED ORDERS oder POSITIONS? Und ja, es hat sich nichts geändert - der Index des ersten Elements beginnt mit "0".
Hinzugefügt: Beispiel
Beispiel: Berechnung von Positionen und schwebenden Aufträgen
Ich meine MQL4, nicht MQL5, es gibt keinen Unterschied zwischen Pending und Market Orders!
Ich meine MQL4, nicht MQL5, da gibt es keine Unterteilung in Pending und Market Pending!
Sie schreiben im MQl5-Forum. Sie schreiben im Hauptteil. Sie posten im MQL5-Forum - und Sie erhalten Antworten zu MQL5.
Fragen zum alten Terminal sind an den speziellen Abschnitt gerichtet: MQL4 und MetaTrader 4. Schreiben Sie von nun an dort. Ich werde Ihre Fragen an sie weiterleiten.
Ich habe zwei Varianten verglichen, in der ersten habe ich OrdersTotal()-1 verwendet und die Suche bei Null begonnen - ich bekam den Fehler
. In der zweiten Variante habe ich bei Eins begonnen und die gesamte OrdersTotal() genommen - diesmal kein Fehler
In den Screenshots können Sie sehen, dass OrdersTotal() die tatsächliche Anzahl der Aufträge anzeigt, nicht OrdersTotal()-1 ...
Die Frage ist, warum OrdersTotal() zeigt die tatsächliche Anzahl der Aufträge, anstatt -1, sollte es so sein, oder es ist etwas Neues?
Denn in diesem Fall sollten wir die Suche nicht bei Null, sondern bei Eins beginnen!
Ich habe zwei Varianten verglichen, in der ersten habe ich OrdersTotal()-1 verwendet und die Suche bei Null begonnen - ich bekam den Fehler
. In der zweiten Variante habe ich bei Eins begonnen und die gesamte OrdersTotal() genommen - diesmal kein Fehler
In den Screenshots können Sie sehen, dass OrdersTotal() die tatsächliche Anzahl der Aufträge anzeigt, nicht OrdersTotal()-1 ...
Die Frage ist, warum OrdersTotal() zeigt die tatsächliche Anzahl der Aufträge, anstatt -1, sollte es so sein, oder es ist etwas Neues?
Denn in diesem Fall sollten wir die Suche nicht bei Null, sondern bei Eins beginnen!
Ich denke, ich habe meinen Fehler verstanden, sorry...
In dieser Bedingung gibt es einen Offset von -1:
if (OrderSelect(i-1,SELECT_BY_POS)==true){}
Entschuldigung, dass ich so unverblümt bin, ich habe den String aus einem anderen Programm übernommen und nicht auf den Offset geachtet!
//+------------------------------------------------------------------+ //| MSBB.mq4 | //| Copyright 2020, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2020, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict #include <MovingAverages.mqh> #property indicator_separate_window #property indicator_buffers 2 #property indicator_color1 clrGreen #property indicator_color2 clrRed #property indicator_width1 1 input int InpMSBBPeriod=3; // Period input ENUM_MA_METHOD InpMSBBMethod=MODE_SMA; // Method //--- indicator buffers double ExtMSBBBuffer[]; double ExtTempBuffer[]; double ExtPriceBuffer[]; double ExtSignalBuffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit(void) { //--- indicator buffers mapping IndicatorDigits(Digits-2); //--- drawing settings IndicatorBuffers(4); SetIndexStyle(0,DRAW_HISTOGRAM); SetIndexBuffer(0,ExtMSBBBuffer); SetIndexBuffer(1,ExtSignalBuffer); SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(2,ExtTempBuffer); SetIndexBuffer(2,ExtPriceBuffer); SetIndexDrawBegin(1,InpMSBBPeriod); //--- name for DataWindow and indicator subwindow label IndicatorShortName("MSBB("+IntegerToString(InpMSBBPeriod)+")"); SetIndexLabel(0,"MSBB"); SetIndexLabel(1,"Signal"); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { int i;//limit; //------ if(rates_total<=InpMSBBPeriod || InpMSBBPeriod<=2) return(0); /*//--- counting from 0 to rates_total ArraySetAsSeries(ExtMSBBBuffer,false); ArraySetAsSeries(ExtSignalBuffer,false); ArraySetAsSeries(open,false); ArraySetAsSeries(high,false); ArraySetAsSeries(low,false); ArraySetAsSeries(close,false);*/ //--- // limit=rates_total-prev_calculated; //if(prev_calculated>0) // limit++; //--- typical price and its moving average for(i=0; i<rates_total; i++) { ExtTempBuffer[i] = NormalizeDouble((close[i]-open[i])/Point(),2); ExtPriceBuffer[i] = NormalizeDouble((close[i+1]-open[i+1])/Point(),2); //ExtMSBBBuffer[i]=price_open+ExtTempBuffer[i]; //Print("ExtPriceBuffer[i] = ", ExtPriceBuffer[i]); if(ExtTempBuffer[i]==0) ExtMSBBBuffer[i]=0.0; if(ExtPriceBuffer[i]>0 && ExtTempBuffer[i]>0) { double price_open = NormalizeDouble((open[i]-open[i+1])/Point(),2); double price_close = NormalizeDouble((close[i]-close[i+1])/Point(),2); if((price_open<0 && price_close>0)||(price_open>0 && price_close<0)) ExtMSBBBuffer[i] = 0.0; if((price_open<0 && price_close<0)||(price_open>0 && price_close>0)) ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open; } if(ExtPriceBuffer[i]>0 && ExtTempBuffer[i]<0) { double price_open = NormalizeDouble((open[i]-close[i+1])/Point(),2); double price_close = NormalizeDouble((close[i]-open[i+1])/Point(),2); if((price_open<0 && price_close>0)||(price_open>0 && price_close<0)) ExtMSBBBuffer[i] = 0.0; if((price_open>0 && price_close>0)||(price_open<0 && price_close<0)) ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open; } if(ExtPriceBuffer[i]<0 && ExtTempBuffer[i]<0) { double price_open = NormalizeDouble((open[i]-open[i+1])/Point(),2); double price_close = NormalizeDouble((close[i]-close[i+1])/Point(),2); if((price_open<0 && price_close>0)||(price_open>0 && price_close<0)) ExtMSBBBuffer[i]=0.0; if((price_open<0 && price_close<0)||(price_open>0 && price_close>0)) ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open; } if(ExtPriceBuffer[i]<0 && ExtTempBuffer[i]>0) { double price_open = NormalizeDouble((open[i]-close[i+1])/Point(),2); double price_close = NormalizeDouble((close[i]-open[i+1])/Point(),2); if((price_open>0 && price_close<0)||(price_open<0 && price_close>0)) ExtMSBBBuffer[i]=0.0; if((price_open>0 && price_close>0)||(price_open<0 && price_close<0)) ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open; } //--- signal line counted in the 2-nd buffer //ExtSignalBuffer[i]=iMAOnArray(ExtMSBBBuffer,0,InpMSBBPeriod,0,InpMSBBMethod,0); SimpleMAOnBuffer(rates_total,prev_calculated,1,InpMSBBPeriod+2,ExtMSBBBuffer,ExtSignalBuffer); Print ("ExtSignalBuffer = ", ExtSignalBuffer[i]); //--- done } /* if(ExtPriceBuffer[i]>0||ExtPriceBuffer[i]<0) { ExtMSBBBuffer[i] = ExtPriceBuffer[i]+ExtTempBuffer[i]; Print("ExtMSBBBuffer[i] = ", ExtMSBBBuffer[i]); } if(ExtPriceBuffer[i]==0) { ExtMSBBBuffer[i] = 0.0; Print("ExtMSBBBuffer[i] = ", ExtMSBBBuffer[i]); } }*/ //--- //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+