Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Voglio imparare a scrivere codice da solo... Così ho pensato di chiedere qualche consiglio. Ho pensato che forse qualcuno potrebbe darmi un campione... Grazie!
Il cliente si lamenta che l'Expert Advisor continua ad aprire trade anche se è stato rimosso dal grafico. Non può essere questo il caso, giusto?
Se cancellato e scritto correttamente, non dovrebbe. Scarico con codice di deinizializzazione - 1. Se l'Expert Advisor si blocca... Dobbiamo affrontarlo...
Se si chiude la finestra EA, l'EA sarà scaricato con il codice di deinizializzazione - 4:
MOTIVO_CHARTCLOSE
4
Il grafico è chiuso
https://www.mql5.com/ru/docs/constants/namedconstants/uninit
Beh, è vero, ci sono citazioni metaquote, se ricordo bene, e le tixtories sono di buona qualità.
Almeno uno screenshot per capire quali righe vuoi unire
Almeno uno screenshot per capire quali righe vuoi unire.
Almeno uno screenshot per capire che tipo di linee vuoi combinare. Grazie per la vostra risposta! Voglio unire due righe di strumenti superiori in una sola su MT4.
Cosa potrebbe significare il colore rosso della variabile dT?
Cosa potrebbe significare il colore rosso della variabile dT?
double Lots=Margin_Percent/MarketInfo(Symbol(),MODE_MARGINREQUIRED);//Определение общего количества лотов
double Lots_Volume=(MathFloor(Lots)+MarketInfo(Symbol(),MODE_LOTSTEP));
double MacdCurrent=iMACD(NULL,0,Fast_EMA_Period,Slow_EMA_Period,Signal_Period,PRICE_CLOSE,MODE_MAIN,1); //Параметры MACD основной линии текущего бара
double MacdPrevious1=iMACD(NULL,0,Fast_EMA_Period,Slow_EMA_Period,Signal_Period,PRICE_CLOSE,MODE_MAIN,2);//Параметры MACD основной линии предыдущего бара
double MacdPrevious2=iMACD(NULL,0,Fast_EMA_Period,Slow_EMA_Period,Signal_Period,PRICE_CLOSE,MODE_MAIN,3);//Параметры MACD основной линии со смещением на 2 бара
double StopLoss=iSAR(NULL,0,Step_PSAR,Maximum_PSAR,0);//Параметры Трейлинг стоп по параметрам ParabolicSAR текущего бара
double Previous_StopLoss=iSAR(NULL,0,Step_PSAR,Maximum_PSAR,1);//Параметры СтопЛосс по параметрам ParabolicSAR предыдущего бара
double CurrentPSAR=iSAR(NULL,0,Step_PSAR,Maximum_PSAR,1);//Параметры СтопЛосс по параметрам ParabolicSAR предыдущего бара
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
static datetime New_Time=TimeCurrent();// Время текущего бара
bool New_Bar=false; // Флаг нового бара
int ticket,total,cnt;
//---------------------------------------------------------------------------
total=OrdersTotal();// Опредление количства ордеров
if(total<1)
{
//--- нет открытых ордеров
if(Margin_Percent<MarketInfo(Symbol(),MODE_MARGINREQUIRED)*(MarketInfo(Symbol(),MODE_MINLOT)))
//Проверка на наличие денежных средств для открытия минимального лота
{
Print("Не хватает средств. Свободные средства = ",AccountFreeMargin());
return;
}
if(Time[0]==New_Time) // Сравниваем время
{
New_Bar=true; // Поймался новый бар
if(New_Bar==false) // Если бар не новый..
return; // ..то уходим
}
//Определение количества лотов
if(Lots>Lots_Volume)
Lots=Lots_Volume;
else if(Lots<Lots_Volume)
Lots=MathFloor(Lots);
return;
//--- условие для открытия длинной позиции (BUY)
if(CurrentPSAR<iOpen(NULL,0,1) &&
((MacdPrevious1>0 && MacdPrevious2<0) ||
(MacdCurrent>0 && MacdPrevious1<0) ||
(MacdCurrent>0 && MacdPrevious1==0 && MacdPrevious2<0)||
(MacdCurrent>0 && MacdPrevious1==0 && MacdPrevious2==0)))
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,StopLoss+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,0,NULL,MAGICNUMBER,0,Green);
if(ticket>0)//проверка отрытия позиции
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("BUY ордер открыт : ",OrderOpenPrice());
else Print("Ошибка открытия ордера BUY : ",GetLastError());
return;
}
}
//--- условие для открытия короткой позиции (SELL)
if(CurrentPSAR>iOpen(NULL,0,1) &&
((MacdCurrent<0 && MacdPrevious1>0) ||
(MacdPrevious1<0 && MacdPrevious2>0) ||
(MacdCurrent<0 && MacdPrevious1<0 && MacdPrevious2>0) ||
(MacdCurrent<0 && MacdPrevious1==0 && MacdPrevious2==0)))
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,StopLoss-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,0,NULL,MAGICNUMBER,0,Red);
if(ticket>0)//проверка открытия позиции
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("SELL ордер открыт : ",OrderOpenPrice());
else Print("Ошибка открытия ордера SELL : ",GetLastError());
return;
}
}
return; //--- выход из блока "нет открытых ордеров"
}
//--- важно правильно войти в рынок, но более важно правильно из него выйти
for(cnt=0;cnt<total;cnt++)
{
if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
continue;
if(OrderMagicNumber()==MAGICNUMBER && // проверка магического номера ордера
OrderSymbol()==Symbol()) // проверка символа ордера
{
//--- длинная позиция открыта
if(OrderType()==OP_BUY)
{
//--- должен быть закрыт?
if(CurrentPSAR>iOpen(NULL,0,1) &&
((MacdCurrent<0 && MacdPrevious1>0) ||
(MacdPrevious1<0 && MacdPrevious2>0) ||
(MacdCurrent<0 && MacdPrevious1<0 && MacdPrevious2>0) ||
(MacdCurrent<0 && MacdPrevious1==0 && MacdPrevious2==0)))
{
//--- закрытие ордера и выход
if(OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet))
{
Print("Ордер закрыт");
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,StopLoss-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,0,NULL,MAGICNUMBER,0,Red);
if(ticket>0)//проверка открытия позиции
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("SELL ордер открыт : ",OrderOpenPrice());
else Print("Ошибка открытия ордера SELL : ",GetLastError());
return;
}
}
else Print("Ошибка закрытия ордера ",GetLastError());
}
//------------------Модификация ордера по СтопЛоссу
else if(StopLoss>Previous_StopLoss && StopLoss<iOpen(NULL,0,0))
{
if(OrderModify(OrderTicket(),OrderOpenPrice(),StopLoss+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,0,0,Blue))
Print("Цена Stop Loss ордера успешно модифицирована.");
else Print("Ошибка модификации ордера. Код ошибки=",GetLastError());
return;
}
return;
}
// идём на короткую позицию
else if(OrderType()==OP_SELL)
{
//--- должен быть закрыт?
if(CurrentPSAR<iOpen(NULL,0,1) &&
((MacdPrevious1>0 && MacdPrevious2<0) ||
(MacdCurrent>0 && MacdPrevious1<0) ||
(MacdCurrent>0 && MacdPrevious1==0 && MacdPrevious2<0)||
(MacdCurrent>0 && MacdPrevious1==0 && MacdPrevious2==0)))
{
//--- закрытие ордера и выход
if(OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet))
{
Print("Ордер закрыт");
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,StopLoss+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,0,NULL,MAGICNUMBER,0,Green);
if(ticket>0)//проверка отрытия позиции
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("BUY ордер открыт : ",OrderOpenPrice());
else Print("Ошибка открытия ордера BUY : ",GetLastError());
return;
}
}
else Print("Ошибка закрытия ордера ",GetLastError());
}
//-----------------Модификация ордера по СтопЛоссу
else if(StopLoss<Previous_StopLoss && StopLoss>iOpen(NULL,0,0))
{
if(OrderModify(OrderTicket(),OrderOpenPrice(),StopLoss-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,0,0,Blue))
Print("Цена Stop Loss ордера успешно модифицирована.");
else Print("Ошибка модификации ордера. Код ошибки=",GetLastError());
return;
}
}
}
}
//------
}
//-------------------------------------------------------------------------------------------------------
Gente, un suggerimento. Tester dà errore: 2017.02.08 18:24:43.751 TestGenerator: errore di dati non abbinati (il valore basso 1,09860 al 2016.07.27 19:30 non è raggiunto dal timeframe più basso, il prezzo basso 1,09880 non corrisponde)