Bem vindos ao Fórum do Portal BolsaPT! Inscrevam-se e participem na nossa comunidade, poderão pedir opiniões e Análises Técnicas às vossas acções, colocar dúvidas, aprender, partilhar ideias, ajudar outros, etc. Além das cotações, gráficos, análise técnica interactiva, históricos, terão simulação de carteiras, alarmes, e muito mais virá no futuro. Lembre-se que se pode logar com o seu login CanalForex!
Sistemas de Trading Mecânicos para ForexPara todos os que pretendem trocar ideias sobre sistemas de trading, trading automatizado, criação de indicadores customizados, combinação de indicadores, linguagens de programação para trading, etc...
Olá a todos, mim escrevi aqui no fórum pois preciso de uma ajuda para modifica um EA, e entendo pouco de programação, gostaria de colocar
2 sistemas a mais no EA , o primeiro é quando abrir um ordem , e o Ea verificar que tem outra ordem aberta na posição contrariar fechar a mesma , o outro
sistema é o de colocar um sistema de (extern double risk) risco para o Ea trabalhar, quem poder mim ajudar ficarei muito agradecido .
------------- o EA----------------------
int start()
{
if(Digits==4||Digits==2)ctldec=1;
if(Digits==5||Digits==3)ctldec=10;
double p=ctldec*Point;
double spread=Ask-Bid;
int cnt=0;
int gle=0;
int OrdersPerSymbol=0;
// stoploss and takeprofit and close control
double SL=0;
double TP=0;
double CurrentProfit=0;
double CurrentBasket=0;
// direction control
bool BUYme=false;
bool SELLme=false;
int Total = OrdersTotal(), // Numero Total de ordens no MetaTrader
NumOrdensBuy = 0, // Numero de ordens buy neste consultor
NumOrdensSell = 0, // Numero de ordens sell neste consultor
i; // utilizado nos loops
// Conta as ordens abertas por este sistema
for(i=0;i<Total;i++) { // passa por todas as ordens abertas
// seleciono a ordem da lista de ordens
// pela localização da mesma na lista
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
// se a ordem pertence a este par e tem este número mágico
if ((OrderSymbol()==Symbol()) && (OrderMagicNumber()==MagicNumber)) {
if (OrderType()==OP_BUY) NumOrdensBuy++; // Conta se for Buy
if (OrderType()==OP_SELL) NumOrdensSell++; // Conta se for Sell
}
}
// verifica se tem de fechar alguma ordem e a fecha
for(i=0;i<Total;i++) { // passa por todas as ordens abertas
// seleciono a ordem da lista de ordens
// pela localização da mesma na lista
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
// se a ordem pertence a este par e tem este número mágico
if ((OrderSymbol()==Symbol()) && // é deste par de moedas
(OrderMagicNumber()==MagicNumber)) { // e é deste Consultor
// se tem ordem aberta e for contraria ao sinal obtido então fecha
if ((BUYme &&(NumOrdensSell>0)) || // Sina Buy com Ordem Sell Aberta
(SELLme&&(NumOrdensBuy>0 ))) // ou Sina Sell com Ordem Buy Aberta
// entao fechar essa ordem
OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0, Red);
}
}
//+-----------------------------+
//| Insert your indicator here |
//| And set either BUYme or |
//| SELLme true to place orders |
//+-----------------------------+
// high and low of [1] and open of [0] either above or below the MA
maHI=High[1];
maLO=Low[1];
maOPEN=Open[0];
ma0=iMA(Symbol(),0,MA_Period,0,MA_Mode,MA_Price,0) ;
Olá
Não entendo bem as questões, pois a primeira vejo que já está no próprio código.
A segunda tem muitas respostas em por exemplo, mql4.com de onde tirei a que apresento abaixo:
#property copyright "AF"
#property link "http://www.i9forex.com/"
extern int MGN=1;
extern int TradeRisk=1;
extern int StopLoss=35;
double p=0;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
int ctldec=1;
if(Digits==5||Digits==3)ctldec=10;
p=ctldec*Point;
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
// codigo
fLots(StopLoss); // Seria melhor, que o StopLoss fosse dinamico e não fixo.
// codigo p/ ABRIR
fFechaContra(1); // Se Ordem aberta é SELL
fFechaContra(2); // Se Ordem aberta é BUY
OLá, obrigado , qui no fórum fica meio ruim para passar os códigos, vou passar o EA completo , para vc ver o que poderia ser mudado. Eu gostaria de add no ea era um sistema para fechar todas as posições quando tiver um sinal contrario das posições já abertas, não deixar duas posções aberta ex; uma de sell e buy. o outro sistema é para deixar o EA trabalhar com sistema risco (EX risk de 5%). ate mais!
O EA------------------------------
/*
+--------+
|Divergence Trader -- v11 has no divergence. How 'bout that!
+--------+
*/
#property copyright "Ron Thompson"
#property link "http://www.lightpatch.com/forex"
// user input
int ctldec=0;
extern double Lots=0.01; // how many lots to trade at a time
extern int MA_Period=88;
extern int MA_Price = PRICE_OPEN;
extern int MA_Mode = MODE_EMA;
extern double ProfitMade=25; // how much money do you expect to make
extern double LossLimit=115; // how much loss can you tolorate
//extern int BasketProfit=10; // if equity reaches this level, close trades
//extern int BasketLoss=9999; // if equity reaches this negative level, close trades
extern int PLBreakEven=5; // set break even when this many pips are made (999=off)
int Slippage=2; // how many pips of slippage can you tolorate
// naming and numbering
int MagicNumber = 200601182020; // allows multiple experts to trade on same account
string TradeComment = "Divergence_07_";
// Bar handling
datetime bartime=0; // used to determine when a bar has moved
int bartick=0; // number of times bars have moved
int objtick=0; // used to draw objects on the chart
int tickcount=0;
// Trade control
bool TradeAllowed=true; // used to manage trades
//+-------------+
//| Custom init |
//|-------------+
// Called ONCE when EA is added to chart or recompiled
int init()
{
int i;
string o;
//remove the old objects
for(i=0; i<Bars; i++)
{
o=DoubleToStr(i,0);
ObjectDelete("myx"+o);
ObjectDelete("myz"+o);
}
objtick=0;
int Total = OrdersTotal(), // Numero Total de ordens no MetaTrader
NumOrdensBuy = 0, // Numero de ordens buy neste consultor
NumOrdensSell = 0, // Numero de ordens sell neste consultor
i; // utilizado nos loops
// Conta as ordens abertas por este sistema
for(i=0;i<Total;i++) { // passa por todas as ordens abertas
// seleciono a ordem da lista de ordens
// pela localização da mesma na lista
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
// se a ordem pertence a este par e tem este número mágico
if ((OrderSymbol()==Symbol()) && (OrderMagicNumber()==MagicNumber)) {
if (OrderType()==OP_BUY) NumOrdensBuy++; // Conta se for Buy
if (OrderType()==OP_SELL) NumOrdensSell++; // Conta se for Sell
}
}
// verifica se tem de fechar alguma ordem e a fecha
for(i=0;i<Total;i++) { // passa por todas as ordens abertas
// seleciono a ordem da lista de ordens
// pela localização da mesma na lista
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
// se a ordem pertence a este par e tem este número mágico
if ((OrderSymbol()==Symbol()) && // é deste par de moedas
(OrderMagicNumber()==MagicNumber)) { // e é deste Consultor
// se tem ordem aberta e for contraria ao sinal obtido então fecha
if ((BUYme &&(NumOrdensSell>0)) || // Sina Buy com Ordem Sell Aberta
(SELLme&&(NumOrdensBuy>0 ))) // ou Sina Sell com Ordem Buy Aberta
// entao fechar essa ordem
OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0, Red);
}
}
//+-----------------------------+
//| Insert your indicator here |
//| And set either BUYme or |
//| SELLme true to place orders |
//+-----------------------------+
// high and low of [1] and open of [0] either above or below the MA
maHI=High[1];
maLO=Low[1];
maOPEN=Open[0];
ma0=iMA(Symbol(),0,MA_Period,0,MA_Mode,MA_Price,0) ;
//Basket profit or loss
//CurrentBasket=AccountEquity()-AccountBalance();
//if( CurrentBasket>=BasketProfit || CurrentBasket<=(BasketLoss*(-1)) )
// {
// CloseEverything();
// }
// CLOSE order if profit target made
for(cnt=OrdersTotal();cnt>=0;cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if( OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber )
{