void OnTick()
{
......здесь работаем с закрытием (тралом и прочим)....
if (Hour()>=10&&Hour()<11) return (0);
......остальной код, в частности для открытия....
}
выдает ошибку: 'return' - 'void' function returns a value
Vitaly Muzichenko:
voidOnTick()
{
......здесь работаем с закрытием (тралом и прочим)....
if (Hour()>=10 && Hour()<11) return;
......остальной код, в частности для открытия....
}
Ciao, che mi dici di OrdersTotal()? Ho sempre saputo che contiene il numero di ordini -1, cioè OrdersTotal()-1 e tutto funzionava, ma ho iniziato a scrivere un programma e improvvisamente, un ordine non viene più contato, ho chiesto OrdersTotal() e mi ha dato il numero totale di ordini = 3, invece di 3-1. Cosa succede?
La forma abituale del ciclo nell'aiuto:
int total=OrdersTotal(); for(int pos=0;pos<totale;pos++) { }
Cioè, il primo ordine è uguale a zero.
Ma no, infatti, il primo ordine è 1, il che significa che dovremmo iniziare la ricerca da 1 e non da zero? Le meta-citazioni hanno fatto qualcosa di sbagliato o sono stupido io?
Не следует путать между собой действующие отложенные ордера и позиции, которые также отображаются на вкладке "Торговля" в панели "Инструменты". Ордер – это распоряжение на проведение торговой операции, а позиция является результатом одной или нескольких сделок.
Maksim Mihajlov: Ciao, cosa succede con OrdersTotal()? Ho sempre saputo che contiene il numero di ordini -1, cioè OrdersTotal()-1, e tutto funzionava, ma ho iniziato a scrivere un programma e improvvisamente un ordine non viene contato. Ho chiesto OrdersTotal() e dice ordini totali = 3, invece di 3-1. Cosa succede?
La forma usuale del ciclo nell'aiuto:
int total=OrdersTotal(); for(int pos=0;pos<totale;pos++) { }
Cioè, il primo ordine è uguale a zero.
Ma no, infatti, il primo ordine è 1, il che significa che dovremmo iniziare la ricerca da 1 e non da zero? Le meta-citazioni hanno fatto qualcosa di sbagliato o sono stupido io?
Hai confuso gli ORDINI RELATIVI e le PISTE. Leggete il riferimento. Sii più specifico nella tua domanda: cosa stai cercando di contare: ORDINI RIMOSSI o POSIZIONI? E sì, non è cambiato nulla - l'indice del primo elemento inizia con '0'.
Hai confuso gli ORDINI RELATIVI e le POSIZIONI. Leggete il riferimento. Formulate la vostra domanda in modo più preciso: cosa state cercando di contare: ORDINI RETRIBUITI o POSIZIONI? E sì, non è cambiato nulla - l'indice del primo elemento inizia con '0'.
Ho confrontato due varianti, nella prima, ho usato OrdersTotal()-1 e ho iniziato la ricerca da zero - ho ottenuto l'errore . Nella seconda variante, ho iniziato da uno e ho preso tutto OrdersTotal() - nessun errore questa volta
Negli screenshot, potete vedere che OrdersTotal() mostra il numero effettivo di ordini, non OrdersTotal()-1...
Ladomanda è perché OrdersTotal() mostra il numero effettivo di ordini, piuttosto che -1, dovrebbe essere così o è qualcosa di nuovo? Perché in questo caso, dovremmo iniziare la ricerca non da zero, ma da uno!
Ho confrontato due varianti, nella prima, ho usato OrdersTotal()-1 e ho iniziato la ricerca da zero - ho ottenuto l'errore . Nella seconda variante, ho iniziato da uno e ho preso tutto OrdersTotal() - nessun errore questa volta
Negli screenshot, potete vedere che OrdersTotal() mostra il numero effettivo di ordini, non OrdersTotal()-1...
Ladomanda è perché OrdersTotal() mostra il numero effettivo di ordini, piuttosto che -1, dovrebbe essere così o è qualcosa di nuovo? Perché in questo caso, dovremmo iniziare la ricerca non da zero, ma da uno!
Credo di aver capito il mio errore, scusate... C'è un offset di -1 in questa condizione: if (OrderSelect(i-1,SELECT_BY_POS)==true){} Scusate la franchezza, ho preso la stringa da un altro programma e non ho fatto attenzione all'offset!
Salve. Ho bisogno del vostro aiuto per correggere l'indicatore. L'essenza dell'indicatore è la seguente. Calcola la grandezza dell'aumento del prezzo rispetto alla barra precedente. Per lo zero ci vuole una barra di stelle. Cioè, il prezzo di apertura è uguale al prezzo di chiusura. In fase di compilazione nessun errore, ma durante il test un errore sulla linea 80 20 caratteri. Anche lalinea del segnale èdisegnata in modo errato. Ma penso che questo sia il motivo del calcolo errato del buffer principale. Per favore, aiutatemi a risolvere il problema.
Некоторые технические индикаторы имеют несколько отрисовываемых на графике буферов. Нумерация индикаторных буферов начинается с 0. При копировании значений индикатора функцией CopyBuffer() в массив типа double для некоторых индикаторов можно указывать не номер копируемого буфера, а идентификатор этого буфера.
Ho sempre saputo che contiene il numero di ordini -1, cioè OrdersTotal()-1 e tutto funzionava, ma ho iniziato a scrivere un programma e improvvisamente, un ordine non viene più contato, ho chiesto OrdersTotal() e mi ha dato il numero totale di ordini = 3, invece di 3-1.
Cosa succede?
La forma abituale del ciclo nell'aiuto:
int total=OrdersTotal();
for(int pos=0;pos<totale;pos++)
{
}
Cioè, il primo ordine è uguale a zero.
Ma no, infatti, il primo ordine è 1, il che significa che dovremmo iniziare la ricerca da 1 e non da zero?
Le meta-citazioni hanno fatto qualcosa di sbagliato o sono stupido io?
Ciao, cosa succede con OrdersTotal()?
Ho sempre saputo che contiene il numero di ordini -1, cioè OrdersTotal()-1, e tutto funzionava, ma ho iniziato a scrivere un programma e improvvisamente un ordine non viene contato. Ho chiesto OrdersTotal() e dice ordini totali = 3, invece di 3-1.
Cosa succede?
La forma usuale del ciclo nell'aiuto:
int total=OrdersTotal();
for(int pos=0;pos<totale;pos++)
{
}
Cioè, il primo ordine è uguale a zero.
Ma no, infatti, il primo ordine è 1, il che significa che dovremmo iniziare la ricerca da 1 e non da zero?
Le meta-citazioni hanno fatto qualcosa di sbagliato o sono stupido io?
Hai confuso gli ORDINI RELATIVI e le PISTE. Leggete il riferimento. Sii più specifico nella tua domanda: cosa stai cercando di contare: ORDINI RIMOSSI o POSIZIONI? E sì, non è cambiato nulla - l'indice del primo elemento inizia con '0'.
Aggiunto: esempio
Esempio: calcolare le posizioni e gli ordini pendenti
Hai confuso gli ORDINI RELATIVI e le POSIZIONI. Leggete il riferimento. Formulate la vostra domanda in modo più preciso: cosa state cercando di contare: ORDINI RETRIBUITI o POSIZIONI? E sì, non è cambiato nulla - l'indice del primo elemento inizia con '0'.
Aggiunto: esempio
Esempio: calcolare le posizioni e gli ordini pendenti
Intendo MQL4, non MQL5, non c'è differenza tra ordini pendenti e a mercato!
Intendo MQL4, non MQL5, non c'è una divisione in pending e market pending!
State scrivendo nel forum MQl5. Stai scrivendo nella sezione principale. Scrivi nel forum MQL5 - e riceverai risposte su MQL5.
Le domande sul vecchio terminale sono indirizzate alla sezione speciale: MQL4 e MetaTrader 4. D'ora in poi, scrivi lì. Vi inoltrerò le vostre domande.
Ho confrontato due varianti, nella prima, ho usato OrdersTotal()-1 e ho iniziato la ricerca da zero - ho ottenuto l'errore
. Nella seconda variante, ho iniziato da uno e ho preso tutto OrdersTotal() - nessun errore questa volta
Negli screenshot, potete vedere che OrdersTotal() mostra il numero effettivo di ordini, non OrdersTotal()-1 ...
Ladomanda è perché OrdersTotal() mostra il numero effettivo di ordini, piuttosto che -1, dovrebbe essere così o è qualcosa di nuovo?
Perché in questo caso, dovremmo iniziare la ricerca non da zero, ma da uno!
Ho confrontato due varianti, nella prima, ho usato OrdersTotal()-1 e ho iniziato la ricerca da zero - ho ottenuto l'errore
. Nella seconda variante, ho iniziato da uno e ho preso tutto OrdersTotal() - nessun errore questa volta
Negli screenshot, potete vedere che OrdersTotal() mostra il numero effettivo di ordini, non OrdersTotal()-1 ...
Ladomanda è perché OrdersTotal() mostra il numero effettivo di ordini, piuttosto che -1, dovrebbe essere così o è qualcosa di nuovo?
Perché in questo caso, dovremmo iniziare la ricerca non da zero, ma da uno!
Credo di aver capito il mio errore, scusate...
C'è un offset di -1 in questa condizione:
if (OrderSelect(i-1,SELECT_BY_POS)==true){}
Scusate la franchezza, ho preso la stringa da un altro programma e non ho fatto attenzione all'offset!
//+------------------------------------------------------------------+ //| 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); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+