Ho deciso di robotizzare un po' il mio trading. Ho usato un Expert Advisor di tendenza dal terminale MT4"MovingAverage". Ho deciso di usare il mio EA dal terminale MT4 e ho fatto alcune leggere modifiche. Ho aggiunto un'altra maschera, cambiato le condizioni di entrata e uscita, aggiunto stop e profitto e limitato il tempo di apertura. Vorrei aggiungere altro.
1) La capacità di aprire due ordini contemporaneamente con stop loss regolabile, take profit, spostamento a zero perdite.
2) Numero regolabile di voci al giorno.
3) Possibilità regolabile di entrare il giorno successivo quando un trade è aperto.
4)Uscita regolabile da stop loss, no loss o take profit.
5)Eliminazione del calcolo del rischio massimo. (bisogno particolare non lo vedo, inoltre non capisco come calcola il rischio, l'impressione che dal fondo, i lotti sono stati aperti poi 0,10 poi 1,00)
6) Non funziona correttamente sulla coppia di valute USDJPY
Forse qualcosa da correggere, pulire per migliorare il lavoro dell'EA. Aiuto o suggerimenti.
Lavora su più di dieci grafici allo stesso tempo, in ogni finestra del grafico della coppia di valute ha il proprio EA. Il codice è allegato. Grazie a tutti quelli che rispondono.
//+------------------------------------------------------------------+//| MA_MA_1.mq4 |//| Copyright 2017, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2017, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"//#property strict#define MAGICMA 20131112//--- Inputsinputdouble SL =500; //стоп лосinputdouble TakeProfit =1000; //тейк профитinputdouble Lots =0.01; //розмер лота//input double MaximumRisk =0.1; //отключил не понятна логика расчетаinputdouble DecreaseFactor = 3; //фактор снижение(наверно проскальзывание)inputint MovingPeriod1 =36; //медленная средняяinputint MovingPeriod2 =12; //быстрая средняяinputint MovingShift1 =10; //сдвиг медленной среднейinputint MovingShift2 = 0; //сдвиг быстрой среднейexternint TimeStart = 8; //время начала торговexternint TimeStop =20; //время окончания торгов//+------------------------------------------------------------------+//| Calculate open positions //считаем открытые позиции |//+------------------------------------------------------------------+int CalculateCurrentOrders(string symbol)
{
int buys=0,sells=0;
//---for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
{
if(OrderType()==OP_BUY) buys++;
if(OrderType()==OP_SELL) sells++;
}
}
//--- return orders volume //объём ордеров на возвратif(buys>0) return(buys);
elsereturn(-sells);
}
//+------------------------------------------------------------------+//| Calculate optimal lot size //расчет оптимального размера лота |//+------------------------------------------------------------------+double LotsOptimized()
{
double lot=Lots;
int orders=HistoryTotal(); // history orders total (история заказов всего)int losses=0; // number of losses orders without a break (количество потерь заказов без перерыва)//--- select lot size //ОТКЛЮЧИЛ выбор размер лота. //lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);//(логика выбора мне не понятна)//--- calcuulate number of losses orders without a break (Расчет количества заказов на потери без перерыва)// if(DecreaseFactor>0)// {// for(int i=orders-1;i>=0;i--)// {// if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)// {// Print("Error in history!");// break;// }// if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL)// continue;//---// if(OrderProfit()>0) break;// if(OrderProfit()<0) losses++;// }// if(losses>1)// lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);// }//--- return lot size (розмер возвращаемого лота)if(lot<0.1) lot=0.1;
return(lot);
}
//+------------------------------------------------------------------+//| Check for open order conditions //проверка условий для открытия ордера |//+------------------------------------------------------------------+void CheckForOpen()
{
double ma1; //медленная средняяdouble ma2; //быстрая средняяint res;
//--- go trading only for first tiks of new bar// торговать только на первом тике нового бараif(Volume[0]>1) return;
//--- get Moving Average //получение скользящих средних
ma1=iMA(NULL,0,MovingPeriod1,MovingShift1,MODE_SMA,PRICE_CLOSE,0);//медленная
ma2=iMA(NULL,0,MovingPeriod2,MovingShift2,MODE_SMA,PRICE_CLOSE,0);//быстрая//--- sell conditions //условия для продажиif(ma1<ma2 && Close[1]<ma1 && TimeHour(TimeCurrent())>TimeStart && TimeHour(TimeCurrent())<TimeStop)
{
res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,Bid+SL*Point,Bid-TakeProfit*Point,"",MAGICMA,0,Red);
return;
}
//--- buy conditions //условия для покупкиif(ma1>ma2 && Close[1]>ma1 && TimeHour(TimeCurrent())>TimeStart && TimeHour(TimeCurrent())<TimeStop)
{
res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,Ask-SL*Point,Ask+TakeProfit*Point,"",MAGICMA,0,Blue);
return;
}
//---
}
//+------------------------------------------------------------------+//| Check for close order conditions //проверка условий для закрытия ордера |//+------------------------------------------------------------------+void CheckForClose()
{
double ma1;//медленнаяdouble ma2;//быстрая//--- go trading only for first tiks of new bar// торговать толькона тике нового бараif(Volume[0]>1) return;
//--- get Moving Average //получение средних
ma1=iMA(NULL,0,MovingPeriod1,MovingShift1,MODE_SMA,PRICE_CLOSE,0);//медленная
ma2=iMA(NULL,0,MovingPeriod2,MovingShift2,MODE_SMA,PRICE_CLOSE,0);//быстрая//---for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
//--- check order type //проверка типа ордераif(OrderType()==OP_BUY)
{
if(Close[1]<ma2 && Open[2]>Close[1] && ma1<ma2) //(Open[1]>ma && Close[1]<ma)
{
if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
Print("OrderClose error ",GetLastError());
}
break;
}
if(OrderType()==OP_SELL)
{
if(Close[1]>ma2 && Open[2]<Close[1] && ma1>ma2)
{
if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White))
Print("OrderClose error ",GetLastError());
}
break;
}
}
//---
}
//+------------------------------------------------------------------+//| OnTick function //функция нового тика |//+------------------------------------------------------------------+voidOnTick()
{
//--- check for history and tradingif(Bars<100 || IsTradeAllowed()==false)
return;
//--- calculate open orders by current symbolif(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
else CheckForClose();
//---
}
//+------------------------------------------------------------------+
Posso avere un aiuto? L'Expert Advisor recupera i trade ogni tick. Come faccio a scrivere il codice per togliere circa 5 scambi o solo quanti ne voglio?
Posso avere un aiuto? L'Expert Advisor recupera i trade ad ogni tick. Come posso scrivere il codice per disegnare circa 5 scambi o solo quanti ne voglio?
Cosa devo cambiare o aggiungere al codice?
Dovrei aggiungere un ciclo e limitare il numero di ordini prima di eseguire OrderSend.
Salve. Puoi scrivere un EA su questa strategia https://www.youtube.com/watch?v=V58JIhy2rw4. O non hai qualche altro EA, che ristagna sul posto o va in profitto un po' .... Per i guadagni sullo sconto sul sito fxcash.ru. Grazie. Se quel bip in uk https://vk.com/id16112208 o in privato.
Buon pomeriggio!
Ho deciso di robotizzare un po' il mio trading. Ho usato un Expert Advisor di tendenza dal terminale MT4"Moving Average". Ho deciso di usare il mio EA dal terminale MT4 e ho fatto alcune leggere modifiche. Ho aggiunto un'altra maschera, cambiato le condizioni di entrata e uscita, aggiunto stop e profitto e limitato il tempo di apertura. Vorrei aggiungere altro.
1) La capacità di aprire due ordini contemporaneamente con stop loss regolabile, take profit, spostamento a zero perdite.
2) Numero regolabile di voci al giorno.
3) Possibilità regolabile di entrare il giorno successivo quando un trade è aperto.
4)Uscita regolabile da stop loss, no loss o take profit.
5)Eliminazione del calcolo del rischio massimo. (bisogno particolare non lo vedo, inoltre non capisco come calcola il rischio, l'impressione che dal fondo, i lotti sono stati aperti poi 0,10 poi 1,00)
6) Non funziona correttamente sulla coppia di valute USDJPY
Forse qualcosa da correggere, pulire per migliorare il lavoro dell'EA. Aiuto o suggerimenti.
Lavora su più di dieci grafici allo stesso tempo, in ogni finestra del grafico della coppia di valute ha il proprio EA. Il codice è allegato. Grazie a tutti quelli che rispondono.
Salve. Puoi usare questa strategia per scrivere un consulente https://www.youtube.com/watch?v=V58JIhy2rw4. O hai qualche consulente che ristagna sul posto o è leggermente in nero.... Per i guadagni sullo sconto sul sito fxcash.ru. Grazie. Se quel bip in Ek https://vk.com/id16112208 o in privato.
Guarda il ramo Avalanche, ci sono consiglieri per questo TS.
Ciao!
Posso avere un aiuto? L'Expert Advisor recupera i trade ogni tick. Come faccio a scrivere il codice per togliere circa 5 scambi o solo quanti ne voglio?
extern int tp=50;
extern int sl=200;
extern double lot=0.01;
oid OnTick()
{
OrderSend("USDJPY",OP_SELL,lot,Bid,0,Ask+sl*Point,Ask-tp*Point, "Batsasho",1,0,Red);
}
Cosa devo cambiare o aggiungere al codice?
Grazie!
Se non lo rendo difficile puoi rispondere ***
Grazie!
Ho provato a rifare i modelli già pronti, ma alla fine danno un paio di errori, mi serve solo un gufo:
1) apre una posizione di acquisto se la candela chiusa è rialzista, e una posizione di vendita se la candela chiusa è ribassista.
2) e così via dopo OGNI candela.
Ho la seconda condizione non funziona.
Se qualcuno può aiutarmi, gliene sarò molto grato.
Posso avere un aiuto? L'Expert Advisor recupera i trade ad ogni tick. Come posso scrivere il codice per disegnare circa 5 scambi o solo quanti ne voglio?
Cosa devo cambiare o aggiungere al codice?