Come controllare nello script/advisor il fatto della fine del calcolo dell'indicatore, quale di essi viene chiamato? Finora ho dovuto mettere Sleep(), ma ho perso mezza giornata per non capire perché i valori nei buffer sono zero...
Aleksey Vyazmikin: Come faccio a controllare nello script/advisor se il calcolo dell'indicatore è finito e quale di essi viene chiamato? Finora ho dovuto mettere Sleep(), ma ho perso mezza giornata per non capire perché i valori nei buffer sono zero...
Io uso il seguente ciclo
int n = 0;
do
{
// Пытаемся получить нужное значение;if(значение не получено)
{
n++;
Sleep(100);
}
}
while(значение не получено && n < 7 && !IsStopped());
Grazie. Speravo ci fosse uno strumento standard per questo, solo non capisco perché i buffer dovrebbero essere riempiti di zeri e poi i valori calcolati messi lì - darebbe un errore di copia del buffer e andrebbe bene...
Grazie. Speravo che ci fosse uno strumento interno per questo, è solo che non è chiaro perché i buffer dovrebbero essere riempiti di zeri e poi i valori calcolati messi lì - darebbe un errore di copia del buffer e andrebbe bene...
Ho degli strumenti interni, una volta ho cercato di capirlo, ma senza successo. Ora non riesco nemmeno a ricordare in quale sezione della documentazione è menzionato. Qualcosa a che fare con la sincronizzazione, se ricordo bene.
Buon pomeriggio, sto scrivendo un indicatore basato su linee di Bollinger a 5 bande, come ultimo passo ho iniziato a scrivere le condizioni per formare un pattern in relazione alle linee dell'indicatore, ma durante i test ottengo 2 varianti: o l'allarme in qualche modo si chiude da solo, o non succede nulla. Ecco un frammento:
Puoi dirmi cosa si può aggiustare qui, se c'è qualcosa da aggiustare?
intOnCalculate (constint rates_total, // размер входных таймсерий constint prev_calculated, // обработано баров на предыдущем вызове constdatetime& time[], // Timeconstdouble& open[], // Open constdouble& high[], // High constdouble& low[], // Low constdouble& close[], // Close constlong& tick_volume[], // Tick Volume constlong& volume[], // Real Volume constint& spread[]) // Spread
{
//---- //--- переменныеint pos; // позицияstaticdatetime prevtime = 0;
int shift1;
int shift2;
int shift3;
string pattern, period;
int setPattern = 0;
int alert = 0;
double O, O1, O2, C, C1, C2, L, L1, L2, H, H1, H2;
//----//---- //--- check for bars count - проверка колчества баровif(rates_total<ExtPlotBegin)
return(0);
//--- начало вычисленияif(prev_calculated>1) pos=prev_calculated-1;
else pos=0;
//--- главный циклfor(int i = pos ; i < rates_total;i++)
{
int shift = 0;
shift1 = shift + 1;
shift2 = shift + 2;
shift3 = shift + 3;
O = open[shift1];
O1 = open[shift2];
O2 = open[shift3];
H = high[shift1];
H1 = high[shift2];
H2 = high[shift3];
L = low[shift1];
L1 = low[shift2];
L2 = low[shift3];
C = close[shift1];
C1 = close[shift2];
C2 = close[shift3];
//--- middle line
ExtMLBuffer[i]=SimpleMA(i,ExtBandsPeriod,close);
//--- calculate and write down StdDev
ExtStdDevBuffer[i]=StdDev_Func(i,close,ExtMLBuffer,ExtBandsPeriod);
//--- upper line
ExtTLBuffer[i]=ExtMLBuffer[i]+ExtBandsDeviations*ExtStdDevBuffer[i];
//--- mediumH line
ExtMDHBuffer[i]=ExtMLBuffer[i]+ExtBandsDeviationsM*ExtStdDevBuffer[i];
//--- mediumL line
ExtMDLBuffer[i]=ExtMLBuffer[i]-ExtBandsDeviationsM*ExtStdDevBuffer[i];
//--- lower line
ExtBLBuffer[i]=ExtMLBuffer[i]-ExtBandsDeviations*ExtStdDevBuffer[i];
// Импульсная свеча от нижней границы Боллинджераif(((O <= H) && (H <= ExtMDLBuffer[i])) && ((L >= C) && (C <= ExtBLBuffer[i])))
{
Alert("Pin up!");
PlaySound ("UpperBandAlert.wav");
}
Sleep(5000);
}
//---- OnCalculate done. Return new prev_calculated. Расчет закончен, возврат к новым предыдущим барамreturn(rates_total);
}
//+-
Volume della prima posizione =0.1, ultimo =0.2, come ottengo il volume dell' ultima posizione =0.2?
Nel conto di copertura questo è il caso:
double Lot_pos_b()
{
int total=0;
double lot=0;
for(int i=PositionsTotal()-1;i>=0;i--)
if(m_position.SelectByIndex(i)) // selects the position by index for further access to its propertiesif(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==m_magic)
if(m_position.PositionType()==POSITION_TYPE_BUY)
{
lot=m_position.Volume();
}
//---return(lot);
}
Su un conto di compensazione, come ottengo il lotto? questa funzione restituisce 0,3 invece di 0,2.
Consenti l'uso dei cookie per accedere al sito MQL5.com.
Abilita le impostazioni necessarie nel browser, altrimenti non sarà possibile accedere.
Hai effettuato l'accesso. L'autenticazione a due fattori è stata disattivata. Configurala di nuovo e scansiona un nuovo codice QR, oppure continua con l'autenticazione a due fattori disattivata.
C'è un robot basato su Alligator + EMA (233) + indicatore stocastico? Se puoi darmi un link. E qual è la tua opinione sulla strategia?
La media mobile non è chiaramente necessaria qui, perché l'Alligator è già composto da tre medie mobili. Rimane Alligator + Stochastic:
Come faccio a controllare nello script/advisor se il calcolo dell'indicatore è finito e quale di essi viene chiamato? Finora ho dovuto mettere Sleep(), ma ho perso mezza giornata per non capire perché i valori nei buffer sono zero...
Io uso il seguente ciclo
Io uso un ciclo come questo.
Grazie. Speravo ci fosse uno strumento standard per questo, solo non capisco perché i buffer dovrebbero essere riempiti di zeri e poi i valori calcolati messi lì - darebbe un errore di copia del buffer e andrebbe bene...
Grazie. Speravo che ci fosse uno strumento interno per questo, è solo che non è chiaro perché i buffer dovrebbero essere riempiti di zeri e poi i valori calcolati messi lì - darebbe un errore di copia del buffer e andrebbe bene...
Ho degli strumenti interni, una volta ho cercato di capirlo, ma senza successo. Ora non riesco nemmeno a ricordare in quale sezione della documentazione è menzionato. Qualcosa a che fare con la sincronizzazione, se ricordo bene.
Buon pomeriggio, sto scrivendo un indicatore basato su linee di Bollinger a 5 bande, come ultimo passo ho iniziato a scrivere le condizioni per formare un pattern in relazione alle linee dell'indicatore, ma durante i test ottengo 2 varianti: o l'allarme in qualche modo si chiude da solo, o non succede nulla. Ecco un frammento:
Puoi dirmi cosa si può aggiustare qui, se c'è qualcosa da aggiustare?
Salve.
Volume della prima posizione =0.1, ultimo =0.2, come ottengo il volume dell' ultima posizione =0.2?
Nel conto di copertura questo è il caso:
Su un conto di compensazione, come ottengo il lotto? questa funzione restituisce 0,3 invece di 0,2.Salve.
Volume della prima posizione =0.1, ultimo =0.2, come ottengo il volume dell'ultima posizione =0.2?
In un conto di copertura, è così:
Nel conto di compensazione, come ottenere il volume del lotto? questa funzione restituisce 0,3 invece di 0,2.Visualizzare i trade appartenenti alla posizione e vedere il loro volume.
Semplicemente, staccate tutte le compravendite trovate di una posizione (le proprietà di ogni posizione) - capite cosa cercare lì.