Makar, ti ringrazio molto per aver indicato i controlli da fare per evitare di mettere in difficoltà il server e bannare l'EAJ.
Controlli fatti in questo modo
livello mod stop per stop
//ПРОВЕРКА НА МОДЕ СТОП ЛЕВЕЛ- МИНИМАЛЬНЫЙ УРОВЕНЬ СТОПА if(sl<MarketInfo(Symbol(),MODE_STOPLEVEL)) // ЕСЛИ СТОПОЛС МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО
{
sl= MarketInfo(Symbol(),MODE_STOPLEVEL);//СТОП ЛОССУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
}
livello di stop mod per il profitto
// ПРОВЕРКА ТЕЙК ПРОФИТА НА МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ УСТАНОВКИif(tp<MarketInfo(Symbol(),MODE_STOPLEVEL)) // ЕСЛИ ПРОФИТ МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО
{
tp= MarketInfo(Symbol(),MODE_STOPLEVEL);// ПРОФИТУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
}
//---- ПРОВЕРКА НА РАЗРЕШЕНИЕ ТОРГОВ ПЕРЕД ОТКРЫТИЕМ ОРДЕРОВif(MarketInfo(Symbol(),MODE_TRADEALLOWED)==true)
{// начало есл торговля разрешена/*
куча проверок на условия открытия и само открытие ордеров
*/
} // КОЕНЦ ПРОВЕРКИ НА РАЗРЕШЕНИЕ ТОРГОВЛИelse//ИНАЧЕ ЕСЛИ ТОРГОВЛЯ НЕ РАЗРЕШЕНА
{ // НАЧАЛО ЭЛС ЕСЛИ ТОРГИ НЕ РАЗРЕШЕНЫ Print("ТОРГИ НЕ РАЗРЕШЕНЫ- ПЫТАТЬСЯ ОТКРЫТЬ ОРДЕРА НЕ БУДЕМ");
} // КОЕНЦ ЭЛС ЕСЛИ ТОРГИ НЕ РАЗРЕШЕНЫ
Controllo del lotto massimo e minimo
Prima ho ottenuto i valori del lotto massimo e del lotto minimo nelle variabili in questo modo
E poi controllo da qualche parte qui sotto mentre scrivo il Graal
if(lot<Min_Lot) lot=Min_Lot; //ЕСЛИ ЛОТ ПОЛУЧИЛСЯ МЕНЬШЕ ЧЕМ МИНИМАЛЬНЫЙ ЛОТ У БРОКЕРА ТО ЛОТ ПРИСВАЕМАЕМ МИНИМАЛЬНЫЙ ЛОТ У БРОКЕРАif(lot>Max_Lot) lot=Max_Lot; //ЕСЛИ ЛОТ ПОЛУЧИЛСЯ БОЛЬШЕ ЧЕМ МАКСИМАЛЬНЫЙ ЛОТ У БРОКЕРА ТО ОЛТ ПРИСВАЕВАЕМ МАКС ЛОТ У БРОКЕРА
È corretto o mi sbaglio?
Non ho controllato il cambio di passo del lotto perché il lotto è calcolato come percentuale del deposito e lì questo valore è moltiplicato per un punto e normalizzato - questo controllo può essere omesso - giusto, o dovrei farlo comunque? Se dobbiamo ancora controllare come scrivere questo assegno?
Il punto principale di tutti questi controlli è quello di avere sempre il valore corretto di stop, profitto e dimensione del lotto, quindi possiamo generalmente iniziare ad aprire gli ordini. Se tutti questi parametri sono a posto, l'Expert Advisor non disturba il server; ho capito bene?
//ПРОВЕРКА НА МОДЕ СТОП ЛЕВЕЛ- МИНИМАЛЬНЫЙ УРОВЕНЬ СТОПА if(sl<MarketInfo(Symbol(),MODE_STOPLEVEL)*1.5) // ЕСЛИ СТОПОЛС МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО
{
sl= MarketInfo(Symbol(),MODE_STOPLEVEL)*1.5;//СТОП ЛОССУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
}
// ПРОВЕРКА ТЕЙК ПРОФИТА НА МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ УСТАНОВКИif(tp<MarketInfo(Symbol(),MODE_STOPLEVEL)*1.5) // ЕСЛИ ПРОФИТ МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО
{
tp= MarketInfo(Symbol(),MODE_STOPLEVEL)*1.5;// ПРОФИТУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
}
Ciao a tutti, qualcuno ha avuto un problema con i punti penzolanti sul grafico trovato tramite iHighest/iLowest?
Preistoria: ho una minima esperienza di programmazione, sto scrivendo un indicatore in mql4 che dovrebbe visualizzare i punti sul grafico, trovati dalle condizioni di if e collegarli con delle linee. Logicamente, cerca i punti correttamente, ma li disegna con un offset, poi per 2 barre, poi per 3 barre. Ho allegato anche il file con il codice.
int start()
{
int counted_bars=IndicatorCounted(); //хранит количество посчитанных индикатором баров. Функция IndicatorCounted() возвращает количество неизмененных баров после прошлого вызова функции start().int n,limit;
int val_index;
if(counted_bars>0)
counted_bars--;
limit=Bars-counted_bars; //количество последних баров, которые нужно пересчитать.if(limit>barsToProcess)
limit=barsToProcess;
for(n=0; n<=limit; n++)
{
if((Close[n+1]>Open[n+1] && Open[n+2]>=Close[n+2]) || (Close[n+1]>Open[n+1] && Open[n+3]>Close[n+3]))
{
val_index=iLowest(NULL,0,MODE_LOW,3,n+1);
myAZBuffer[n]=Low[val_index];
ExtLowBuffer[n]=Low[val_index];
}
elseif((Open[n+1]>Close[n+1] && Close[n+2]>=Open[n+2]) || (Close[n+1]<Open[n+1] && Close[n+3]>Open[n+3]))
{
val_index=iHighest(NULL,0,MODE_HIGH,3,n+1);
myAZBuffer[n]=High[val_index];
ExtHighBuffer[n]=High[val_index];
}
}
return (0);
}
Ciao a tutti, qualcuno ha avuto un problema con i punti penzolanti sul grafico trovato tramite iHighest/iLowest?
Preistoria: ho una minima esperienza di programmazione, sto scrivendo un indicatore in mql4 che dovrebbe visualizzare i punti sul grafico, trovati dalle condizioni di if e collegarli con delle linee. Logicamente, cerca i punti correttamente, ma li disegna con un offset, poi per 2 barre, poi per 3 barre. Ho allegato anche il file con il codice.
I punti sono disegnati correttamente, senza un offset.
Se la condizione è soddisfatta e iHighest/iLowest sono più grandi o più piccoli degli attuali High/Low
i punti sono disegnati correttamente, senza offset
se la condizione è soddisfatta e iHighest/iLowest è maggiore o minore dell'attuale High / Low
poi disegna
Quindi, penso che sto iniziando a capire il mio errore) Quindi, al fine di visualizzare visivamente questi punti nel posto giusto, ho bisogno di inserire qualche contatore separato invece di n per myAZBuffer[n], ExtLowBuffer[n], ExtHighBuffer[n] ? ma come fare questo
azolotta: Così, penso che sto cominciando a capire il mio errore) Si scopre che per visualizzare visivamente questi punti nel posto giusto, ho bisogno di inserire qualche contatore separato invece di n per myAZBuffer[n], ExtLowBuffer[n], ExtHighBuffer[n] ? ma come farlo
No, avete capito bene.
la condizione utilizza due o tre barre della storia,
ecco perché disegna dopo 2-3 barre quando la condizione è soddisfatta
la condizione utilizza due o tre barre della storia,
ecco perché disegna dopo 2-3 barre quando la condizione è soddisfatta
OK, allora come faccio a rielaborare il codice se ho bisogno, per esempio, di scegliere il massimo più alto delle ultime 3 barre (che soddisfano le condizioni in if) e mettere un punto su di esso (proprio su questo alto!), poi anche trovare il punto basso.
MakarFX , che funzione ha questo bind: che funzione svolge?
input int BarTrade = 5; // capisco che questo è il numero dei periodi tracciati di 5.
int TimeBarTrade=BarTrade*Period()*60; // come capisco, perché è moltiplicato per 60?
MakarFX , che funzione ha questo bind: che funzione svolge?
input int BarTrade = 5; // capisco che questo è il numero dei periodi tracciati di 5.
int TimeBarTrade=BarTrade*Period()*60; // come si capisce, perché è moltiplicato per 60?
BarTrade*Periodo()*60
numero di barre * timeframe corrente * 60 secondi
cioè la quantità di barre convertita in secondi
BarTrade*Periodo()*60
numero di barre * timeframe corrente * 60 secondi
cioè il numero di barre convertito in secondi
Puoi farlo in questo modo.
Se si escludono gli errori relativi a
MODE_STOPLEVEL, MODE_TRADEALLOWED, MODE_MINLOT, MODE_LOTSTEP, MODE_MAXLOT
allora i gufi non colpiranno il server.
Makar, ti ringrazio molto per aver indicato i controlli da fare per evitare di mettere in difficoltà il server e bannare l'EAJ.
Controlli fatti in questo modo
livello mod stop per stop
livello di stop mod per il profitto
Verifica dell'autorizzazione al commercio
Controllo del lotto massimo e minimo
Prima ho ottenuto i valori del lotto massimo e del lotto minimo nelle variabili in questo modo
E poi controllo da qualche parte qui sotto mentre scrivo il Graal
È corretto o mi sbaglio?
Non ho controllato il cambio di passo del lotto perché il lotto è calcolato come percentuale del deposito e lì questo valore è moltiplicato per un punto e normalizzato - questo controllo può essere omesso - giusto, o dovrei farlo comunque? Se dobbiamo ancora controllare come scrivere questo assegno?
Il punto principale di tutti questi controlli è quello di avere sempre il valore corretto di stop, profitto e dimensione del lotto, quindi possiamo generalmente iniziare ad aprire gli ordini. Se tutti questi parametri sono a posto, l'Expert Advisor non disturba il server; ho capito bene?
Grazie mille, Makar, per avermi detto quali controlli fare per evitare il server e bannare l'EAJ.
//ПРОВЕРКА НА МОДЕ СТОП ЛЕВЕЛ- МИНИМАЛЬНЫЙ УРОВЕНЬ СТОПА// ПРОВЕРКА ТЕЙК ПРОФИТА НА МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ УСТАНОВКИCi può essere un errore di 130 qui dovuto allo slittamento.
Io farei questo
Ciao a tutti, qualcuno ha avuto un problema con i punti penzolanti sul grafico trovato tramite iHighest/iLowest?
Preistoria: ho una minima esperienza di programmazione, sto scrivendo un indicatore in mql4 che dovrebbe visualizzare i punti sul grafico, trovati dalle condizioni di if e collegarli con delle linee. Logicamente, cerca i punti correttamente, ma li disegna con un offset, poi per 2 barre, poi per 3 barre. Ho allegato anche il file con il codice.
Ciao a tutti, qualcuno ha avuto un problema con i punti penzolanti sul grafico trovato tramite iHighest/iLowest?
Preistoria: ho una minima esperienza di programmazione, sto scrivendo un indicatore in mql4 che dovrebbe visualizzare i punti sul grafico, trovati dalle condizioni di if e collegarli con delle linee. Logicamente, cerca i punti correttamente, ma li disegna con un offset, poi per 2 barre, poi per 3 barre. Ho allegato anche il file con il codice.
I punti sono disegnati correttamente, senza un offset.
Se la condizione è soddisfatta e iHighest/iLowest sono più grandi o più piccoli degli attuali High/Low
disegna
i punti sono disegnati correttamente, senza offset
se la condizione è soddisfatta e iHighest/iLowest è maggiore o minore dell'attuale High / Low
poi disegna
Così, penso che sto cominciando a capire il mio errore) Si scopre che per visualizzare visivamente questi punti nel posto giusto, ho bisogno di inserire qualche contatore separato invece di n per myAZBuffer[n], ExtLowBuffer[n], ExtHighBuffer[n] ? ma come farlo
No, avete capito bene.
la condizione utilizza due o tre barre della storia,
ecco perché disegna dopo 2-3 barre quando la condizione è soddisfatta
No, avete capito bene.
la condizione utilizza due o tre barre della storia,
ecco perché disegna dopo 2-3 barre quando la condizione è soddisfatta