O estranho agora é que o Expert Advisor não está trabalhando com o fechamento das posições. pode haver várias posições do mesmo tipo abertas e ativas ao mesmo tempo. E o resultado: tudo está perdendo com o mesmo problema, embora em uma versão modificada!
Conserte-o, experimente-o.
externdoubleLots = 0.1;
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+intstart(){doubleP_up0,P_down0,P_up1,P_down1;
doublest_m1, st_s1, st_m2, st_s2,Pivot,ma_s1;
inti, cnt, ticket, total;
boolflag=true;
if(Bars<100){Print("bars less than 100");
return(0);
}// Проверяем стоит ли открыватьсяcnt=OrdersHistoryTotal()-1;
for(i=cnt;i>=0;i--){if(!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))continue;
if(OrderOpenTime()>=Time[0]){// Time[0] - если позиция открывается на нулевом баре текущего символаflag=false;
break;
}}cnt=OrdersTotal()-1;
for(i=cnt;i>=0;i--){if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))continue;
if(OrderOpenTime()>=Time[0]){// Time[0] - если позиция открывается на нулевом баре текущего символаflag=false;
break;
}}//-----------------------------------------------P_up0=iCustom(0,0,"Ценовой канал",11,0,0);
P_down0=iCustom(0,0,"Ценовой канал",11,1,0);
P_up1=iCustom(0,0,"Ценовой канал",11,0,1);
P_down1=iCustom(0,0,"Ценовой канал",11,1,1);
st_m1=iStochastic(0,0,10,3,3,MODE_SMA,0,MODE_MAIN,1);
st_s1=iStochastic(0,0,10,3,3,MODE_SMA,0,MODE_SIGNAL,1);
st_m2=iStochastic(0,0,10,3,3,MODE_SMA,0,MODE_MAIN,2);
st_s2=iStochastic(0,0,10,3,3,MODE_SMA,0,MODE_SIGNAL,2);
Pivot=iCustom(0,0,"Pivot",0,1);
ma_s1=iMA(0,0,4,0,MODE_SMA,PRICE_CLOSE,1);
//задали все данные // Проверка свободной маржиif(AccountFreeMargin()<(1000*Lots)){Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}total=OrdersTotal();
// Условие открытие позиции BUYif(st_m2>st_s2&&st_m1>st_s1&&st_m2<25&&Pivot<ma_s1){if((total>0) || (!flag))return(0);
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"",0,0,Green);
if(ticket>0){if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))Alert("Покупка: ",OrderOpenPrice());
}elseAlert("ошибка:по цене ",OrderOpenPrice());
return(0);
}// Условие открытие позиции SELLif(st_m2<st_s2&&st_m1<st_s1&&st_m2>75&&Pivot>ma_s1){if((total>0) || (!flag))return(0);
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"",0,0,Red);
if(ticket>0){if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))Alert("Покупка: ",OrderOpenPrice());
}elseAlert("ошибка:по цене ",OrderOpenPrice());
return(0);
}for(i=cnt;i>=0;i--){OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && OrderSymbol()==Symbol()){if(OrderType()==OP_BUY){// длинная позиция открыта// условие закрытие длинной позицииif(P_down1>P_down0){OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);
return(0);
}}else{// условие закрытия короткой позицииif(P_up1<P_up0){OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);
return(0);
}}}}return(0);
}
Quando o teste, eu recebo 0 em vez de 4. A mesma coisa está em uma matriz bidimensional, o que devo fazer?
E aproveitando a oportunidade para fazer uma segunda pergunta: como entendo mql4, você não pode definir um intervalo específico para atribuir uma variável a números aleatórios?
Eu encontrei uma variante do código aqui.
como ele pode ser inserido em minha EA????????????
O estranho agora é que o Expert Advisor não está trabalhando com o fechamento das posições. pode haver várias posições do mesmo tipo abertas e ativas ao mesmo tempo. E o resultado: tudo está perdendo com o mesmo problema, embora em uma versão modificada!
Conserte-o, experimente-o.
Olá.
Ao programar uma rede neural, eu encontrei o seguinte problema.
Eu tenho uma matriz:
Quando o teste, eu recebo 0 em vez de 4. A mesma coisa está em uma matriz bidimensional, o que devo fazer?
E aproveitando a oportunidade para fazer uma segunda pergunta: como entendo mql4, você não pode definir um intervalo específico para atribuir uma variável a números aleatórios?
Em Delphi parece ser assim
Randomize;
i:=Random(10); // o mesmo intervalo de 0 a 10
...eu tenho uma matriz:
Ao testar, recebo 0 em vez de 4. A mesma coisa acontece em uma matriz bidimensional, o que eu faço?
A matriz é simples, você define a dimensão [3] e chama a quarta célula ausente.
Escreva duplo X[4]; e tudo vai funcionar.
Com uma matriz é simples, você define a dimensão [3], mas você chama a quarta, célula ausente.
Escreva duplo X[4]; e tudo vai funcionar.
Obrigado, eu vou tentar, mas e se for aleatório?
E se existe uma matriz bidimensional, uma matriz 4 por 9 e a cada elemento é atribuído um valor de 0,1, isso seria mais ou menos correto?
E se você tiver uma matriz bidimensional, uma matriz de 4 por 9, e atribuir o valor 0,1 a cada elemento, será assim?
Deve funcionar. Se você não se sentir preguiçoso e exibir toda a matriz linha por linha no comentário, você verá o resultado.
A propósito, você pode fazer do comentário uma função e usá-lo para verificar o conteúdo da matriz.
E sobre a aleatoriedade, vou passar. Eu estava apenas de passagem e vi o erro. :))
Obrigado, vou tentar, mas e se for aleatório?
E se houver uma matriz bidimensional, uma matriz 4 por 9 e a cada elemento for atribuído um valor de 0,1, será que seria algo assim?
Pode ser usado
E se você tiver uma matriz bidimensional, uma matriz 4 por 9 e atribuir um valor de 0,1 a cada elemento, será que funcionaria assim?
Funcionaria, mas deveria ser escrito desta forma: