[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 1034

 
Techno:
si può. il solito esperto/scrittore

Forse c'è già qualcosa di simile, puoi dirmi dove trovarlo? O conosci qualcuno che può scriverne uno?

 

aiuto per favore pro

Il pezzo di codice qui sotto non funziona.

I valori MA sono calcolati e assegnati alla variabile MA

correttamente, ma non sono assegnati ad un array. L'array è definito come doppio

dinamica. La procedura di stampa stampa i valori nulli dell'array.

i=i_max; // ...calcola il numero dato.

if (flag_NewBar==true) // ricalcolare solo durante l'arrivo del primo tick

{

while(i>=0) // ciclo sulle barre non lette

MA=iMA(g_ext_smb,g_ext_TameFrame,g_ext_Period_MA,0,g_ext_Method,g_ext_PRICE,i);

MA=NormalizeDouble(MA,Digits);

mas_MA[i]=MA;

i--; }

 

Non capisco perché c'è un errore 130? Per favore, aiutatemi.

Ecco il codice:

   double myPrice      = NormalizeDouble(Bid - 10*Pnt*10,Digits);
   double myTakeProfit = NormalizeDouble(myPrice + TakeProfit * Pnt*10,Digits);                                                     //
   if (RAVI0_2_24_D1 > 1 && RAVI0_2_24_D1 < 5 && RAVI0_2_24_D1_1 < RAVI0_2_24_D1 && RAVI0_2_24_D1_2 < RAVI0_2_24_D1_1 && RAVI0_2_24_D1_3 < RAVI0_2_24_D1_2) myTakeProfit = myTakeProfit + 25 * Pnt*10;
   double myStopLoss   = NormalizeDouble(myPrice - StopLoss * Pnt*10,Digits);
   datetime myTimeEnd  = TimeCurrent() + wait*60;
   Alert("OP_BUYLIMIT: Spread=",MarketInfo(Symbol(),MODE_SPREAD)," Stop=",DoubleToStr(MarketInfo(Symbol(), MODE_STOPLEVEL), 2)," lot=",DoubleToStr(lotMM,3)," Pr=",DoubleToStr(myPrice,6)," SL=",DoubleToStr(myStopLoss,6)," TP=",DoubleToStr(myTakeProfit,6));
   ticket=OrderSend(Symbol(),OP_BUYLIMIT,lotMM,myPrice,Slippage,myStopLoss,myTakeProfit,ExpertName, MagicNumber,myTimeEnd,myColor);

Ho volutamente inserito Alert per vedere il problema, ma non riesco a trovarlo.

Ecco il messaggio di Alert:

2010.12.13 12:39:36 2010.09.01 11:35 DVD 100-50 cent iK EURUSD,M1: OrderSend error 130

2010.12.13 12:39:36 2010.09.01 11:35 DVD 100-50 cent iK EURUSD,M1: Alert: OP_SELLLIMIT: Spread=1 Stop=10.00 lot=0.010 Pr=1.280300 SL=1.320300 TP=1.240300

 
VNG:

aiuto per favore pro

Il pezzo di codice qui sotto non funziona.

I valori MA sono calcolati e assegnati alla variabile MA

correttamente, ma non sono assegnati ad un array. L'array è definito come doppio

dinamica. La procedura di stampa stampa valori nulli per l'array.

i=i_max; // ...calcola il numero dato.

if (flag_NewBar==true) // ricalcolare solo durante l'arrivo del primo tick

{

while(i>=0) // ciclo sulle barre non lette

MA=iMA(g_ext_smb,g_ext_TameFrame,g_ext_Period_MA,0,g_ext_Method,g_ext_PRICE,i);

MA=NormalizeDouble(MA,Digits);

mas_MA[i]=MA;

i--; }

IMHO gli array dovrebbero avere una certa dimensione, tranne gli array negli indicatori progettati per il "disegno". Penso che dovrebbe essere inserito:
ArrayResize(mas_MA,i_max);
 
globad:

Gente, per favore consigliatemi! È possibile fare un programma che dia un segnale acustico quando il prezzo passa 10-11p in 0.1-0.4s?

Suggerisco un altro modo, 0.1-0.4s è circa un tick, cambiare asc l'intera panoramica del mercato per tick.
File:
temp_4.mq4  4 kb
 
ikatsko:

Non capisco perché c'è un errore 130? Per favore, aiutatemi.

Ecco il codice:

Ho volutamente inserito Alert per vedere il problema, ma non riesco a trovarlo.

Ecco il messaggio di Alert:

2010.12.13 12:39:36 2010.09.01 11:35 DVD 100-50 cent iK EURUSD,M1: OrderSend error 130

2010.12.13 12:39:36 2010.09.01 11:35 DVD 100-50 cent iK EURUSD,M1: Alert: OP_SELLLIMIT: Spread=1 Stop=10.00 lot=0.010 Pr=1.280300 SL=1.320300 TP=1.240300


Passo dopo passo, cambiare le fermate prendere overshooting prezzo di apertura (perché il pendolo è più basso dal prezzo) alle costanti, scoprire quasi dove l'errore è.

Dall'aiuto "Se il prezzo di apertura dell'ordine pendente non è corretto, verrà generato l'errore 130 (ERR_INVALID_STOPS)".

ticket=OrderSend(Symbol(),OP_BUYLIMIT,1,Close[0]+DoubleToStr(MarketInfo(Symbol(), MODE_STOPLEVEL), 2)*2,15,0,0,ExpertName, MagicNumber,myTimeEnd,myColor);
 
VNG:

aiuto per favore pro

Il pezzo di codice qui sotto non funziona.

I valori MA sono calcolati e assegnati alla variabile MA

correttamente, ma non sono assegnati ad un array. L'array è definito come doppio

dinamica. La procedura di stampa stampa valori nulli per l'array.

i=i_max; // ...calcolare un numero dato.

if (flag_NewBar==true) // ricalcolare solo durante l'arrivo del primo tick

{

while(i>=0) // ciclo sulle barre non lette

MA=iMA(g_ext_smb,g_ext_TameFrame,g_ext_Period_MA,0,g_ext_Method,g_ext_PRICE,i);

MA=NormalizeDouble(MA,Digits);

mas_MA[i]=MA;

i--; }

Leggilo

https://book.mql4.com/ru/operators/while

https://docs.mql4.com/ru/series/iBarShift

Io farei questo

if (flag_NewBar) // пересчитываем только во время прихода первого тика
 for(i=i_max;i>=0;i--) // Цикл по непосчитанным барам
    mas_MA[i]=NormalizeDouble(iMA(g_ext_smb,g_ext_TameFrame,g_ext_Period_MA,0,g_ext_Method,g_ext_PRICE,
                                                             iBarShift(g_ext_smb,g_ext_TameFrame,Time[i],false)),Digits);
if (flag_NewBar==true) // пересчитываем только во время прихода первого тика
while(i>=0){ // Цикл по непосчитанным барам
mas_MA[i]=NormalizeDouble(iMA(g_ext_smb,g_ext_TameFrame,g_ext_Period_MA,0,g_ext_Method,g_ext_PRICE,i),Digits);
i--; 
} 
 
ditemi, quanti eibar meno di zero si possono usare per disegnare gli oggetti? qual è il minimo?
 
costy_:

Passo dopo passo, cambiare le fermate prendere overshooting prezzo di apertura (come il pendolo è più alto sotto il prezzo) a costanti, identificare praticamente dove l'errore è.

Dall'aiuto "L'errore 130 (ERR_INVALID_STOPS) sarà generato se il prezzo di apertura dell'ordine pendente è sbagliato".

Sì, UZH :) Infatti, l'errore è che il prezzo di apertura del pendente è vicino al prezzo corrente. L'ho aggiustato e l'ho fatto funzionare. GRAZIE

 
eddy:
ditemi, quanti eibarshift meno di zero possono essere usati per disegnare gli oggetti? qual è il minimo?

ebarshift sta cercando una barra per tempo (niente funzionerà).

nel terminale l'ultima barra è 0, il tempo è legato alle barre, cioè solo così al futuro tramite le stringhe

ObjectCreate("ff",OBJ_VLINE,0,StrToTime("2010.12.13 20:00"),0); //