Apro un ordine e poi dipende da quale bilancio si è chiuso.
Se il saldo è inferiore a zero, registriamo la perdita, e se è maggiore di zero, cominciamo a lavorare dall'inizio.
Se la nostra perdita è inferiore a zero, l'abbiamo fissata e assegnata a una variabile, per esempio: Meno
Minus = OrderProfit (- 45 centesimi);
ContoAqviti + Meno + il mio valore (la mia coscienza)
più avanti nel prossimo ordine
se il profitto di questo ordine è superiore a AccountAqviti + Minus + il mio valore (la mia coscienza), allora chiudiamo l'ordine; se non è superiore a zero, allora lo sistemiamo:
(AccountAqviti + OrderProfit) - (AccountAqviti + Minus + il mio valore (la mia coscienza)) = Meno
Buon pomeriggio! Vorrei creare un indicatore che visualizza un canale su indicatori come MASD, AO e simili. Questo indicatore è sovrapposto alla finestra degli indicatori di base (MASD, AO e simili) ed è disegnato come linee parallele sopra e sotto lo 0. Queste linee sono definite come una media dei picchi massimi (sopra 0) e minimi (sotto 0) per il periodo specificato. Sto cercando di usare l'indicatore AO come esempio, ma non funziona. Algoritmo: scriviamo le letture dell'indicatore in un array, corriamo attraverso questo array alla ricerca di picchi / depressioni, li scriviamo in determinati array, troviamo il valore medio dei picchi, poi dei depressioni, assegniamo il valore ottenuto al buffer dell'indicatore. In questa fase, non è il canale (che si attacca a 0) sull'indicatore che è definito nel codice, ma il valore medio dei picchi massimi e il valore medio dei minimi bassi. La definizione dei picchi e delle depressioni può essere rimossa dal codice ed eseguita come una funzione, ma per ora l'ho lasciata così - non fa alcuna differenza. Problemi: 1. il terminale si blocca (considerevolmente) 2. le linee non sono visualizzate come una media; appaiono come max/min per un periodo. C'è voluto molto tempo per capirlo, ma non riesco a capire la causa dei problemi. Potete per favore aiutarmi a correggere il mio codice o darmi un link al codice sorgente di problemi simili e cercherò di correggerlo ulteriormente. Grazie in anticipo.
int start(){
int limit=Bars-IndicatorCounted();
for(int i=limit;i>=0;i--){
// if (IsNewBar()){int j=0;
for (int d=2;d<=period-1;d++){
ArrayResize(AO,j+1);
AO[j]=AO(d); // Запишем данные инд. в цикле в массивPrint("АО-",AO[j],"-",d,"-",i);
j++;
}
int k_up=0,k_dw=0; double SDw=0,SUp=0,P1=0,P2=0;
//собираем экстремумы выше 0for (int p=4;p<=period-1; p++){
if (AO[p]>AO[p+1] && AO[p]>AO[p-1]
&& AO[p+1]>AO[p+2]
&& AO[p+2]>AO[p+3]
&& AO[p+3]>0
&& AO[p-1]>AO[p-2]
&& AO[p-2]>AO[p-3]
&& AO[p-3]>0){ // Нашли максArrayResize(Up, k_up+1); // Размер массива донышек под кол-во найденных донышек
Up[k_up]=AO(p); // Заносим значение пика в массив Print("значение пика-",Up[k_up],"-",p);
SUp=SUp+Up[k_up];
P1=SUp/(k_up+1);
k_up++; // Увеличиваем индекс массива донышек
}
//собираем впадины ниже 0if (AO[p]<AO[p+1] && AO[p]<AO[p-1]
&& AO[p+1]<AO[p+2]
&& AO[p+2]<AO[p+3]
&& AO[p+3]<0
&& AO[p-1]<AO[p-2]
&& AO[p-2]<AO[p-3]
&& AO[p-3]<0){ // Нашли минArrayResize(Dw, k_dw+1); // Размер массива донышек под кол-во найденных донышек
Dw[k_dw]=AO[p]; // Заносим значение пика в массив Print("значение донышка-",Dw[k_dw],"-",p);
SDw=SDw+Dw[k_dw];
P2=SDw/(k_dw+1);
k_dw++;// Увеличиваем индекс массива донышек
}
}
level1[i]=P1;
level2[i]=P2;
}
return(0);
}
//+------------------------------------------------------------------+double AO(int a){double AO=iAO( NULL, 0, a);
return(AO);
}
for (int d=2;d<=period-1;d++){
ArrayResize(AO,j+1);
Aumentare la dimensione di un array in un ciclo è crudele, ecco perché si blocca. Aumentare le dimensioni una volta sola. O usare le serie temporali in una volta sola
first_may: Buon pomeriggio, potreste dirmi come scrivere una condizione per cui se il profitto di un ordine aperto è un pungente, allora chiudete quell'ordine?
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Возвращает суммарный профит открытых позиций в пунктах |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+int GetProfitOpenPosInPoint(string sy="", int op=-1, int mn=-1) {
double p;
int i, k=OrdersTotal(), pr=0;
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
if (mn<0 || OrderMagicNumber()==mn) {
p=MarketInfo(OrderSymbol(), MODE_POINT);
if (p==0) if (StringFind(OrderSymbol(), "JPY")<0) p=0.0001; else p=0.01;
if (OrderType()==OP_BUY) {
pr+=(MarketInfo(OrderSymbol(), MODE_BID)-OrderOpenPrice())/p;
}
if (OrderType()==OP_SELL) {
pr+=(OrderOpenPrice()-MarketInfo(OrderSymbol(), MODE_ASK))/p;
}
}
}
}
}
return(pr);
}
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.
Questa è la mia idea:
Apro un ordine e poi dipende da quale bilancio si è chiuso.
Se il saldo è inferiore a zero, registriamo la perdita, e se è maggiore di zero, cominciamo a lavorare dall'inizio.
Se la nostra perdita è inferiore a zero, l'abbiamo fissata e assegnata a una variabile, per esempio: Meno
Minus = OrderProfit (- 45 centesimi);
ContoAqviti + Meno + il mio valore (la mia coscienza)
più avanti nel prossimo ordine
se il profitto di questo ordine è superiore a AccountAqviti + Minus + il mio valore (la mia coscienza), allora chiudiamo l'ordine; se non è superiore a zero, allora lo sistemiamo:
(AccountAqviti + OrderProfit) - (AccountAqviti + Minus + il mio valore (la mia coscienza)) = Meno
se Minus >= 0, allora Minus = 0;
Questa è la mia idea:
Buon pomeriggio! Vorrei creare un indicatore che visualizza un canale su indicatori come MASD, AO e simili. Questo indicatore è sovrapposto alla finestra degli indicatori di base (MASD, AO e simili) ed è disegnato come linee parallele sopra e sotto lo 0. Queste linee sono definite come una media dei picchi massimi (sopra 0) e minimi (sotto 0) per il periodo specificato.
Sto cercando di usare l'indicatore AO come esempio, ma non funziona.
Algoritmo:
scriviamo le letture dell'indicatore in un array,
corriamo attraverso questo array alla ricerca di picchi / depressioni,
li scriviamo in determinati array,
troviamo il valore medio dei picchi, poi dei depressioni,
assegniamo il valore ottenuto al buffer dell'indicatore.
In questa fase, non è il canale (che si attacca a 0) sull'indicatore che è definito nel codice, ma il valore medio dei picchi massimi e il valore medio dei minimi bassi.
La definizione dei picchi e delle depressioni può essere rimossa dal codice ed eseguita come una funzione, ma per ora l'ho lasciata così - non fa alcuna differenza.
Problemi:
1. il terminale si blocca (considerevolmente)
2. le linee non sono visualizzate come una media; appaiono come max/min per un periodo.
C'è voluto molto tempo per capirlo, ma non riesco a capire la causa dei problemi. Potete per favore aiutarmi a correggere il mio codice o darmi un link al codice sorgente di problemi simili e cercherò di correggerlo ulteriormente. Grazie in anticipo.
ExistInHistoryToDay().
Buon pomeriggio!
Problemi:
1. il terminale si blocca (significativamente)
Aumentare la dimensione di un array in un ciclo è crudele, ecco perché si blocca. Aumentare le dimensioni una volta sola. O usare le serie temporali in una volta sola
P.S. vedi messaggi personali
Come faccio a fare un loop su una variabile di tipo stringa?
Esempio
Come posso sostituire questa costruzione con un ciclo?Buon pomeriggio, potreste dirmi come scrivere una condizione per cui se il profitto di un ordine aperto è un pungente, allora chiudete quell'ordine?
Utilizzando la funzione.
https://www.mql5.com/ru/forum/131859/page3#434225
Come faccio a fare un loop su una variabile di tipo stringa?
Esempio
Come posso sostituire questo costrutto con un ciclo?Grazie