[ARQUIVO] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 3. - página 539
Estou escrevendo um EA baseado no indicador QQEA. Portanto, a idéia para o EA é: quando a linha vermelha cruza a linha amarela para cima, uma ordem de compra deve abrir, e quando a linha vermelha cruza a linha amarela para baixo, uma ordem de venda deve abrir. Mas não sou capaz de abrir apenas um pedido. As ordens são abertas desde que a condição seja cumprida. Sim, e somente as ordens de compra são abertas HAYDNT ?!
//
Código EA
//--- input parametersexterndouble MaxRisk=1.0;
externdouble FixLot = 0.01;
externdouble Exponent=2.0;
externint Magic = 888;
// костылиexternint TakeProfit=100;
externint StopLoss=100;
int init()
return(0);
}
int deinit()
{
//----//----return(0);
}
int start()
{
//----int Count=0;
double b0,b1;
int ticket;
// параметры индикатораint SF = 5; // original 5int RSI_Period = 14; // original 14double DARFACTOR = 4.236; //original 4.236//------------ Параметры из индикатора QQEA -----------------------// Buffer0 -- красная жирнаяstring Buffer0 = iCustom(NULL, 0, "QQEA" , SF, RSI_Period, DARFACTOR,0 , 0);
// Buffer1 -- жёлтый пунктирstring Buffer1 = iCustom(NULL, 0, "QQEA" , SF, RSI_Period, DARFACTOR,1 , 0);
b0=StrToDouble(Buffer0);
b1=StrToDouble(Buffer1);
double Lot=GetLot(MaxRisk);
// если лот <0 выводим сообщение об ошибкеif(Lot==0)
{
Alert("Недостаточно средств!");
return(0);
}
if (Lot!=0 && b0>b1) // если лот <> 0 и красная выше жёлтой
{
ticket=NewOrder(OP_BUY,Lot);
if (ExistOrders(Symbol(), 1, 888, 0) == true ) // проверяем наличие ордера sell
{
CloseOrder();
}
}
if (Lot!=0 && b0<b1) // если лот <> 0 и красная выше жёлтой
{
ticket=NewOrder(OP_SELL,Lot);
if (ExistOrders(Symbol(), 0, 888, 0) == true ) // проверяем наличие ордера buy
{
CloseOrder();
}
}
Comment("Red line: ",b0,"Yellow line: ",b1);
return(0);
}
//-------------------------------------------------------------//расчёт лотаdouble GetLot(int Risk)
{double Free =AccountFreeMargin();
double One_Lot =MarketInfo(Symbol(),MODE_MARGINREQUIRED);
double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT);
double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT);
double Step =MarketInfo(Symbol(),MODE_LOTSTEP);
double Lot =MathFloor(Free*Risk/100/One_Lot/Step)*Step;
if(Lot<Min_Lot) Lot=Min_Lot;
if(Lot>Max_Lot) Lot=Max_Lot;
if(Lot*One_Lot>Free) return(0.0);
return(Lot);}
bool ExistOrders(string sy="", int op=-1, int Magic=-1, datetime ot=0)
{
int i, k=OrdersTotal(), ty;
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
ty=OrderType();
if (ty>1 && ty<6) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || ty==op)) {
if (Magic<0 || OrderMagicNumber()==Magic) {
if (ot<=OrderOpenTime()) return(True);
}
}
}
}
}
return(False);
}
//открытие нового ордераint NewOrder(int Cmd,double Lot)
{double TP=0; //тейкпрофитdouble SL=0; //стоплоссdouble PR=0; //Ценаwhile(!IsTradeAllowed()) Sleep(100);
if(Cmd==OP_BUY)
{PR=Ask;
if(TakeProfit>0) TP=Ask+TakeProfit*Point;
if(StopLoss>0) SL=Ask-StopLoss*Point;}
if(Cmd==OP_SELL)
{PR=Bid;
if(TakeProfit>0) TP=Bid-TakeProfit*Point;
if(StopLoss>0) SL=Bid+StopLoss*Point;}
int tic=OrderSend(Symbol(),Cmd,Lot,PR,3,SL,TP," ",0,0,Green);
if(tic<0) Print("Ошибка открытия ордера: " ,GetLastError());
return(tic);}
// закрытие ордераvoid CloseOrder()
{double PR=0;
while(!IsTradeAllowed()) Sleep(100);
if(OrderType()==OP_BUY) PR=Bid;
if(OrderType()==OP_SELL) PR=Ask;
if(!OrderClose(OrderTicket(),OrderLots(),PR,3,Red))
Print("Ошибка закрытия ордера: " ,GetLastError());
return;}
Estou escrevendo um EA baseado no indicador QQEA. Portanto, a idéia para o EA é: quando a linha vermelha cruza a linha amarela para cima, uma ordem de compra deve abrir, e quando a linha vermelha cruza a linha amarela para baixo, uma ordem de venda deve abrir. Mas não sou capaz de abrir apenas um pedido. As ordens são abertas desde que a condição seja cumprida. Sim, e somente as ordens de compra são abertas HAYDNT ?!
Estou escrevendo um EA baseado no indicador QQEA. Portanto, a idéia para o EA é: quando a linha vermelha cruza a linha amarela para cima, uma ordem de compra deve abrir, e quando a linha vermelha cruza a linha amarela para baixo, uma ordem de venda deve abrir. Mas não sou capaz de abrir apenas um pedido. As ordens são abertas desde que a condição seja cumprida. E apenas as ordens de compra são abertas.
Ajuda com as matrizes. Não funciona do jeito que eu quero.
Existe uma matriz de preços p[]. Preciso criar uma nova matriz, cujo comprimento é um elemento a menos e é contado como a diferença entre dois elementos adjacentes da primeira matriz. Se a diferença for negativa, então multiplique por -1.
Ajuda com as matrizes. Não funciona do jeito que eu quero.
Existe uma matriz de preços p[]. Preciso criar uma nova matriz, cujo comprimento é um elemento a menos e é contado como a diferença entre dois elementos adjacentes da primeira matriz. Se a diferença for negativa, então multiplique por -1.
Para login e uso do site MQL5.com, você deve ativar o uso de cookies.
Ative esta opção no seu navegador, caso contrário você não poderá fazer login.
Você entrou na conta. A autenticação de dois fatores foi desativada. Configure-a novamente e escaneie um novo código QR ou continue com a autenticação de dois fatores desativada.
Estou escrevendo um EA baseado no indicador QQEA. Portanto, a idéia para o EA é: quando a linha vermelha cruza a linha amarela para cima, uma ordem de compra deve abrir, e quando a linha vermelha cruza a linha amarela para baixo, uma ordem de venda deve abrir. Mas não sou capaz de abrir apenas um pedido. As ordens são abertas desde que a condição seja cumprida. Sim, e somente as ordens de compra são abertas HAYDNT ?!
Código EA
Estou escrevendo um EA baseado no indicador QQEA. Portanto, a idéia para o EA é: quando a linha vermelha cruza a linha amarela para cima, uma ordem de compra deve abrir, e quando a linha vermelha cruza a linha amarela para baixo, uma ordem de venda deve abrir. Mas não sou capaz de abrir apenas um pedido. As ordens são abertas desde que a condição seja cumprida. Sim, e somente as ordens de compra são abertas HAYDNT ?!
//
Código EA
Estou escrevendo um EA baseado no indicador QQEA. Portanto, a idéia para o EA é: quando a linha vermelha cruza a linha amarela para cima, uma ordem de compra deve abrir, e quando a linha vermelha cruza a linha amarela para baixo, uma ordem de venda deve abrir. Mas não sou capaz de abrir apenas um pedido. As ordens são abertas desde que a condição seja cumprida. E apenas as ordens de compra são abertas.
//
Código EA
Deixe-me fazer-lhe uma pergunta.
Em que base é utilizado o tipo de fio?
caras, a EA usa dois períodos de tempo diferentes (30 e 60), diga-me que período colocar no testador e se o período de teste na EA não mudará?
O que significam estas entradas de registro:
2012.01.31 14:34:45 Manipulador de memória: não pode alocar 10436536 bytes de memória
2012.01.31 14:34:45:45 HistoryBase: memória insuficiente 'EURGBP1' [206996 bars]
? É possível consertar se houver algum problema?
Ajuda com as matrizes. Não funciona do jeito que eu quero.
Existe uma matriz de preços p[]. Preciso criar uma nova matriz, cujo comprimento é um elemento a menos e é contado como a diferença entre dois elementos adjacentes da primeira matriz. Se a diferença for negativa, então multiplique por -1.
há p [6]={1, 5, 9, 4, 4, 6, 2, 3}
Devemos conseguir
p_diff[5] = {-1*(1-5), -1*(5-9), 9-4, -1*(4-6), 6-2, -1*(2-3)} i.e. p_diff[5] = {4, 4, 5, 2, 4, 1}
O que significam estas entradas de registro:
2012.01.31 14:34:45 Manipulador de memória: não pode alocar 10436536 bytes de memória
2012.01.31 14:34:45:45 HistoryBase: memória insuficiente 'EURGBP1' [206996 bars]
? É possível consertar se houver algum problema?
Ajuda com as matrizes. Não funciona do jeito que eu quero.
Existe uma matriz de preços p[]. Preciso criar uma nova matriz, cujo comprimento é um elemento a menos e é contado como a diferença entre dois elementos adjacentes da primeira matriz. Se a diferença for negativa, então multiplique por -1.
há p [6]={1, 5, 9, 4, 4, 6, 2, 3}
Devemos conseguir
p_diff[5] = {-1*(1-5), -1*(5-9), 9-4, -1*(4-6), 6-2, -1*(2-3)} i.e. p_diff[5] = {4, 4, 5, 2, 4, 1}
A função retorna o valor absoluto (valor modulo) do número passado a ela