[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 832
La stessa cosa. Si chiude una posizione - si imposta un ordine pendente, ecc. C'è una funzione che restituisce l'ultimo valore (per esempio OrderCloseTime()). Ad ogni tick, ottengo il valore temporale dell'ultima posizione chiusa (diciamo la posizione #1). Quando chiudo la posizione successiva (posizione #2) con un nuovo tick ottengo il tempo per chiudere questa (#2) posizione. Il valore di OrderCloseTime() è cambiato rispetto al precedente. E così via. Non mi interessa come o quanto la variabile sia cambiata. Ciò che conta per me è il fatto stesso che la variabile sia cambiata. È come un'operazione logica: se l'OrderCloseTime() dell'ultima posizione chiusa è maggiore dell'OrderCloseTime() della penultima, allora dovremmo fare BLA-BLA-BLA. Inoltre - se l'OrderClosePrice() dell'ultima posizione chiusa non è uguale all'OrderClosePrice() della penultima, allora fate un BLA-BLA-BLA. O forse non è possibile fare un tale confronto?
Ecco la domanda. Supponiamo, per esempio, che il nostro EA mostri un segnale di acquisto quando l'indicatore (per esempio, ho preso il CCI) attraversa un certo livello (la linea rossa) dal basso verso l'alto, e un segnale di vendita quando esso, rispettivamente, scende. Come possiamo fare in modo che l'ordine si apra solo una volta durante la formazione della barra A? Supponiamo che l'indicatore incroci il livello (la linea rossa) verso il basso e verso l'alto diverse volte durante la formazione della barra A. Come ho già detto, dovremmo fare in modo che l'ordine venga aperto solo una volta.
Ciò di cui ho bisogno è che il segnale di vendita ricevuto sulla barra D (situazione 2 sul grafico) non chiuda l'ordine aperto sulla barra A , e non sia influenzato in alcun modo.
Cioè, gli ordini non sono controllati dall'Expert Advisor dopo la loro apertura.
Forrim: Ecco la domanda. Supponiamo che il segnale di acquisto nell'EA sarà visualizzato quando l'indicatore (per esempio, ho preso CCI) attraversa un certo livello (linea rossa) dal basso verso l'alto e il segnale di vendita, rispettivamente, quando è dall'alto verso il basso. Come possiamo fare in modo che l'ordine si apra solo una volta durante la formazione della barra A? Supponiamo che l'indicatore incroci il livello (la linea rossa) verso il basso e verso l'alto diverse volte durante la formazione della barra A. Come ho già detto, dovremmo fare in modo che un ordine venga aperto solo una volta.
Questo richiede che ad un segnale di vendita da ricevere sulla barra D (situazione 2 sul grafico) l'ordine aperto sulla barra A non deve essere chiuso e non deve essere influenzato in alcun modo.
Cioè, gli ordini non sono controllati dall'EA dopo la loro apertura.
Molte grazie in anticipo.
In realtà, il CCI salta così selvaggiamente che è meglio controllarlo dopo che il bar è stato chiuso e ne è stato aperto uno nuovo.
Se vogliamo controllare se il tempo di apertura di una candela è diverso (se lo è, l'ordine si apre) o è lo stesso (=> nessun ordine si apre), allora ad ogni incrocio dovremmo memorizzare il tempo di apertura nella variabile globale.
Forrim: Ecco la domanda. Supponiamo, per esempio, che il nostro EA mostri un segnale di acquisto quando l'indicatore (per esempio, ho preso il CCI) attraversa un certo livello (la linea rossa) dal basso verso l'alto, e un segnale di vendita quando esso, rispettivamente, scende. Come possiamo fare in modo che l'ordine si apra solo una volta durante la formazione della barra A? Supponiamo che l'indicatore incroci il livello (la linea rossa) verso il basso e verso l'alto diverse volte durante la formazione della barra A. Come ho già detto, dovremmo fare in modo che l'ordine venga aperto solo una volta.
Ciò di cui abbiamo bisogno è che il segnale di vendita ricevuto sulla barra D (situazione 2 sul grafico) non chiuda l'ordine aperto sulla barra A , e non sia influenzato in alcun modo.
Cioè, gli ordini non sono controllati dall'Expert Advisor dopo la loro apertura.
Grazie in anticipo.
Se una posizione di questo tipo è già aperta, non aprirne altre.
//--------------------------------------------------------------- 1 --// Численные значения для М15externdouble StopLoss =20; // SL для открываемого ордераexterndouble TakeProfit =20; // ТР для открываемого ордераexterndouble Step_Sar=0.02; // Шаг Sarexterndouble Maximum_Sar=0.2; // Максимум Sarexterndouble Lot=0.01; // Жестко заданное колич. лотовbool Work=true; // Эксперт будет работать.//--------------------------------------------------------------- 2 --int start()
{
int
Total, // Количество ордеров в окне
Ticket; // Номер ордераdouble
Sar_1 , // Значен. Sar текущее
Sar_0 , // Значение Sar предыдущей свечки
Price, // Цена ордера
SL, // SL ордера
TP; // TP ордераbool
Ans =false, // Ответ сервера после закрытия
Cls_B=false, // Критерий для закрытия Buy
Cls_S=false, // Критерий для закрытия Sell
Opn_B=false, // Критерий для открытия Buy
Opn_S=false; // Критерий для открытия Sell//--------------------------------------------------------------- 3 -- // Учёт ордеров
Total=0; // Количество ордеровfor(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
{ // Анализ ордеров:if (OrderSymbol()!=Symbol())continue; // Не наш фин. инструмif (OrderType()>1) // Попался отложенный
{
Alert("Обнаружен отложенный ордер. Эксперт не работает.");
return; // Выход из start()
}
Total++; // Счётчик рыночн. ордif (Total>1) // Не более одного орд
{
Alert("Несколько рыночных ордеров. Эксперт не работает.");
return; // Выход из start()
}
Price =OrderOpenPrice(); // Цена выбранн. орд.
SL =OrderStopLoss(); // SL выбранного орд.
TP =OrderTakeProfit(); // TP выбранного орд.
Lot =OrderLots(); // Количество лотов
}
}
//--------------------------------------------------------------- 6 --// Торговые критерии
Sar_1=iSAR(NULL, 0, 0.02, 0.2, 1); // Sar_1
Sar_0=iSAR(NULL, 0, 0.02, 0.2, 0); // Sar_0if (Sar_0 > Price && Sar_1 < Price) // если Sar меняет положение
{
Opn_B=true; // Критерий откр. Buy
}
if (Sar_0 < Price && Sar_1 > Price) // если Sar меняет положение
{
Opn_S=true; // Критерий откр. Sell
}
//--------------------------------------------------------------- 7 --
{
if (Opn_B==true)
{ // критерий откр. Buy
RefreshRates(); // Обновление данных
SL=(20+Ask-Bid)*Bid; // Вычисление SL откр.
TP=20*Bid; // Вычисление TP откр.Alert("Попытка открыть Buy. Ожидание ответа..");
Ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,0,SL,TP);//Открытие Buy
}
if (Fun_Error(GetLastError())==1) // Обработка ошибокreturn; // Выход из start()if (Opn_S==true) // критерий откр. Sell
{ // критерий откр. Sell
RefreshRates(); // Обновление данных
SL=(20+Ask-Bid)*Ask; // Вычисление SL откр.
TP=20*Ask; // Вычисление TP откр.Alert("Попытка открыть Sell. Ожидание ответа..");
Ticket=OrderSend(Symbol(),OP_SELL,Lot,Bid,0,SL,TP);//Открытие Selreturn; // Выход из start()
}
if (Fun_Error(GetLastError())==1) // Обработка ошибокreturn; // Выход из start()
}
//--------------------------------------------------------------- 9 --return; // Выход из start()
}
//-------------------------------------------------------------- 10 --int Fun_Error(int Error) // Ф-ия обработ ошибок
{
switch(Error)
{ // Преодолимые ошибки case4: Alert("Торговый сервер занят. Пробуем ещё раз..");
Sleep(3000); // Простое решениеreturn(1); // Выход из функцииcase135:Alert("Цена изменилась. Пробуем ещё раз..");
RefreshRates(); // Обновим данныеreturn(1); // Выход из функцииcase136:Alert("Нет цен. Ждём новый тик..");
while(RefreshRates()==false) // До нового тикаSleep(1); // Задержка в циклеreturn(1); // Выход из функцииcase137:Alert("Брокер занят. Пробуем ещё раз..");
Sleep(3000); // Простое решениеreturn(1); // Выход из функцииcase146:Alert("Подсистема торговли занята. Пробуем ещё..");
Sleep(500); // Простое решениеreturn(1); // Выход из функции// Критические ошибкиcase2: Alert("Общая ошибка.");
return(0); // Выход из функцииcase5: Alert("Старая версия терминала.");
Work=false; // Больше не работатьreturn(0); // Выход из функцииcase64: Alert("Счет заблокирован.");
Work=false; // Больше не работатьreturn(0); // Выход из функцииcase133:Alert("Торговля запрещена.");
return(0); // Выход из функцииcase134:Alert("Недостаточно денег для совершения операции.");
return(0); // Выход из функцииdefault: Alert("Возникла ошибка ",Error); // Другие варианты return(0); // Выход из функции
}
}
//-------------------------------------------------------------- 11 --
EA elementare, dovrebbe aprire una posizione quando l'indicatore Parabolic SAR cambia rispetto al grafico del prezzo, lavora su M15, SL e TP sono sempre costanti per la posizione aperta.
L'EA confronta le posizioni degli indicatori delle candele attuali e precedenti.
Non ci sono errori o bug durante la compilazione, nel test nelle schede "risultati" "grafico" "rapporto" è vuoto, nel log è questo: "immagine".
Sto codificando per il secondo giorno, non ho mai codificato prima, ho letto i miei libri mql e cercato su internet il mio problema. Sono ad un punto morto, per favore aiutatemi se potete.
Cosa cambierà la prossima volta?
Ciò di cui ho bisogno è che il segnale di vendita ricevuto sulla barra D (situazione 2 sul grafico) non chiuda l'ordine aperto sulla barra A , e non sia influenzato in alcun modo.
Cioè, gli ordini non sono controllati dall'Expert Advisor dopo la loro apertura.
Grazie in anticipo.
Per favore aiutatemi ad allegare un pezzo di codice Sequent Demarque all'EA https://www.mql5.com/ru/code/7372
non funziona così:
num=0:
for(i=bars; i>=0; i--)
{
se ((iClose(NULL,PERIOD_M5,i+1)<iClose(NULL,PERIOD_M5,i+4) && num!=0 )) {
num++;
se ((iClose(NULL,PERIOD_M5,i+1)<iClose(NULL,PERIOD_M5,i+4))
comprare.......
se (num==9)
chiudere........
1. Conta il numero di ordini del primo tipo
2. Conta il numero di ordini di tipo 2
3. Confrontare i risultati
Caro Vinin. Grazie mille!
Ecco la domanda. Supponiamo che il segnale di acquisto nell'EA sarà visualizzato quando l'indicatore (per esempio, ho preso CCI) attraversa un certo livello (linea rossa) dal basso verso l'alto e il segnale di vendita, rispettivamente, quando è dall'alto verso il basso. Come possiamo fare in modo che l'ordine si apra solo una volta durante la formazione della barra A? Supponiamo che l'indicatore incroci il livello (la linea rossa) verso il basso e verso l'alto diverse volte durante la formazione della barra A. Come ho già detto, dovremmo fare in modo che un ordine venga aperto solo una volta.
Questo richiede che ad un segnale di vendita da ricevere sulla barra D (situazione 2 sul grafico) l'ordine aperto sulla barra A non deve essere chiuso e non deve essere influenzato in alcun modo.
Cioè, gli ordini non sono controllati dall'EA dopo la loro apertura.
Molte grazie in anticipo.
In realtà, il CCI salta così selvaggiamente che è meglio controllarlo dopo che il bar è stato chiuso e ne è stato aperto uno nuovo.
Se vogliamo controllare se il tempo di apertura di una candela è diverso (se lo è, l'ordine si apre) o è lo stesso (=> nessun ordine si apre), allora ad ogni incrocio dovremmo memorizzare il tempo di apertura nella variabile globale.
Ecco la domanda. Supponiamo, per esempio, che il nostro EA mostri un segnale di acquisto quando l'indicatore (per esempio, ho preso il CCI) attraversa un certo livello (la linea rossa) dal basso verso l'alto, e un segnale di vendita quando esso, rispettivamente, scende. Come possiamo fare in modo che l'ordine si apra solo una volta durante la formazione della barra A? Supponiamo che l'indicatore incroci il livello (la linea rossa) verso il basso e verso l'alto diverse volte durante la formazione della barra A. Come ho già detto, dovremmo fare in modo che l'ordine venga aperto solo una volta.
Ciò di cui abbiamo bisogno è che il segnale di vendita ricevuto sulla barra D (situazione 2 sul grafico) non chiuda l'ordine aperto sulla barra A , e non sia influenzato in alcun modo.
Cioè, gli ordini non sono controllati dall'Expert Advisor dopo la loro apertura.
Grazie in anticipo.
EA elementare, dovrebbe aprire una posizione quando l'indicatore Parabolic SAR cambia rispetto al grafico del prezzo, lavora su M15, SL e TP sono sempre costanti per la posizione aperta.
L'EA confronta le posizioni degli indicatori delle candele attuali e precedenti.
Non ci sono errori o bug durante la compilazione, nel test nelle schede "risultati" "grafico" "rapporto" è vuoto, nel log è questo: "immagine".
Sto codificando per il secondo giorno, non ho mai codificato prima, ho letto i miei libri mql e cercato su internet il mio problema. Sono ad un punto morto, per favore aiutatemi se potete.
T.H.C. prova questo
T.H.C. Prova questo.
Grazie mille, non mi aspettavo una risposta così rapida e un tale cambiamento nel codice.
Si prega di consigliare su libri di programmazione diversi da mql di base
Grazie mille, non mi aspettavo una tale velocità e cambiamenti nel codice.
Per favore, consigliatemi altri libri sulla programmazione, oltre a mql di base.