o que eu faço agora ??? tenho uma estratégia baseada em canais - existe alguma alternativa de substituição?
É claro que há. Calcule os valores, salve-os em uma matriz ou estrutura e use-os para sua EA. E você também pode desenhar os objetos a partir daí - os valores estão disponíveis.
Quero implementar o seguinte a capacidade de adicionar diferentes prazos a UMA folha (em janelas diferentes, mas em uma folha) Por favor, informe para onde ir e onde cavar?) é possível através do mql ou da WInApi? talvez haja exemplos do artigo que não consegui encontrar(
por favor, ajude-me a corrigir isso! ele dá erro 'Void' - declaração sem tipo 36 4 e onde rearranjar ou escrever retorno? //
Void OnTick() {
O vazio é escrito com uma letra minúscula em vez de maiúsculas. Veja, é uma cor diferente. Coloque o cursor sobre esta palavra e pressione F1 - muitas vezes isso ajuda.
Tantas mensagens de erro aparecem após a correção... Eu corrigi as mensagens de erro, mas verifique você mesmo a lógica
#property strictbool Результат;
externint SL = 200, //Стоплосс в пунктах
TStop = 20, //
TStep = 10, //
TP = 85; //Тейкпрофит в пунктах//extern double Lot = 0.10; //используется только при risk = 0externdouble Lots = 0; // лот, если 0, то динамическийexterndouble RiskPercentage = 50; // % от депо на лот, если динамическийexternint MaxOrders = 6; //Максимальное кол-во ордеров одного направления//--------------------------------------------------------------------int STOPLEVEL,Magic=123321,tip;
datetime TimeBar;
string txt;
//--------------------------------------------------------------------int init()
{
if(Digits==3||Digits==5)
{
TStop *=10;
TStep *=10;
SL *=10;
}
return(INIT_SUCCEEDED);
}
//--------------------------------------------------------------------voidOnTick()
{
double Lot = Lots;
int Ticket = 0;
if (Lots==0)
{
double margin = MarketInfo(Symbol(), MODE_MARGINREQUIRED);
double minLot = MarketInfo(Symbol(), MODE_MINLOT);
double maxLot = MarketInfo(Symbol(), MODE_MAXLOT);
double step = MarketInfo(Symbol(), MODE_LOTSTEP);
double account = AccountFreeMargin();
double percentage = account*RiskPercentage/100;
Lot = MathRound(percentage/margin/step)*step;
if(Lot < minLot) Lot = minLot;
if(Lot > maxLot)Lot = maxLot;
}
int buy=0,sell=0;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS))
{
if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
tip=OrderType();
if (tip==0) buy++;
if (tip==1) sell++;
}
}
Comment(txt,"\nБаланс ",DoubleToStr(AccountBalance(),2),"\nЭквити ",DoubleToStr(AccountEquity(),2),"\nBuy ",buy,"\nSel ",sell);
double TrPr=0,StLo=0;
double L = NormalizeDouble(Low[0], Digits);
double L1 = NormalizeDouble(Low[1], Digits);
double L2 = NormalizeDouble(Low[2], Digits);
double L3 = NormalizeDouble(Low[3], Digits);
double H = NormalizeDouble(High[0],Digits);
double H1 = NormalizeDouble(High[1],Digits);
double H2 = NormalizeDouble(High[2],Digits);
double H3 = NormalizeDouble(High[3],Digits);
double O = NormalizeDouble(Open[0], Digits);
double O1 = NormalizeDouble(Open[1], Digits);
double O2 = NormalizeDouble(Open[2], Digits);
double O3 = NormalizeDouble(Open[3], Digits);
double C = NormalizeDouble(Close[0],Digits);
double C1 = NormalizeDouble(Close[1],Digits);
double C2 = NormalizeDouble(Close[2],Digits);
double C3 = NormalizeDouble(Close[3],Digits);
//LONGif (buy<MaxOrders && TimeBar!=Time[0]&& H>H1&&H1>H2&&H2>H3)
{
if (TP!=0) TrPr = NormalizeDouble(Ask + TP * Point,Digits);
if (SL!=0) StLo = NormalizeDouble(Bid - SL * Point,Digits);
Ticket=OrderSend(Symbol(),OP_BUY, Lots,NormalizeDouble(Ask,Digits),3,0,0,"BreakdownLevelCandleMA",Magic,0,Blue);
if (Ticket==0)
Print("Error BUY",GetLastError(),"",Symbol()," Lot ",Lot," SL ",StLo," TP ",TrPr);
else
{
Результат=OrderModify(Ticket,OrderOpenPrice(),StLo,TrPr,0,Blue);
TimeBar=Time[0];
}
}
//SHORTif (sell<MaxOrders && TimeBar!=Time[0]&& L>L1&&L1>L2&&L2>L3)
{
if (TP!=0) TrPr = NormalizeDouble(Bid - TP * Point,Digits);
if (SL!=0) StLo = NormalizeDouble(Ask + SL * Point,Digits);
Ticket=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),3,0,0,"BreakdownLevelCandleMA",Magic,0,Red);
if (Ticket==0)
Print("Error SELL",GetLastError(),"",Symbol()," Lot ",Lot," SL ",StLo," TP ",TrPr);
else
{
Результат=OrderModify(Ticket,OrderOpenPrice(),StLo,TrPr,0,Red);
TimeBar=Time[0];
}
}
Trailing();
}
//!!! куда передвинуть? return(0);void Trailing()
{
for(int i=OrdersTotal() -1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic)
{
if(OrderType()==OP_BUY)
{
if (Bid-OrderOpenPrice()> TStop*Point || OrderStopLoss() ==0)
{
if(OrderStopLoss()<Bid-(TStep+TStop)*Point || OrderStopLoss() ==0)
{
if(!OrderModify(OrderTicket(), OrderOpenPrice(),NormalizeDouble(Bid-TStop*Point, Digits),0,0))
Print("Ошибка модификации ордера на покупку");
}
}
}
if(OrderType()==OP_SELL)
{
if (OrderOpenPrice()-Ask>TStop*Point || OrderStopLoss() ==0)
{
if((OrderStopLoss()> (Ask+(TStep+TStop)*Point)) || (OrderStopLoss()==0) )
{
if(!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+TStop*Point,Digits),0,0))
{
Print("Ошибка модификации ордера на продажу");
}
}
}
}
}
}
}
}
O vazio é escrito com uma letra minúscula, não com uma letra maiúscula grande. Veja se é uma cor diferente. Coloque o cursor sobre esta palavra e pressione F1 - muitas vezes isso ajuda.
Depois de consertar tantas mensagens de erro aparecem... Consertou as mensagens de erro, mas verifique você mesmo a lógica
Olá, cavalheiros comerciantes! Eu escrevi um robô de sinalização baseado no código que coloquei acima. O robô gera sinais para opções quase com precisão, mas com uma defasagem de duas barras. O que devo mudar no código para produzir os mesmos resultados, mas duas barras mais cedo? Ou isso é impossível? Obrigado.
A variável int contém exatamente o número de segundos desde 1970, enquanto a variável data/hora contém a data.
Se você precisar de uma determinada barra no histórico, então não importa como especificá-la - por data ou por número de segundos, em qualquer caso, a variável indicará o tempo de abertura desta barra em particular, independentemente da chegada de novos tiquetaques e da abertura de novas barras.
Muito obrigado, mas há mais um problema. Tenho indicador que tem função stat, esta função deve ser usada SOMENTE quando chega um novo sinal, mas este problema é contar com cada barra, fiz tudo e normalizei o doble em comparação, então acho que estou ferrado. Morto a noite inteira, alguém pode explicar o que está errado ???? O indicador no atache na linha 193 é uma chamada de função com uma condição, mas a condição não é atendida e a condição é contada na chegada de cada bar, já estou doente e cansado para encontrar o erro, caras ajudem por favor!!!!! Obrigado antecipadamente....
Descobri apenas agora que a função estatística é recalculada se o indicador for chamado de outro indicador, quando ambos estão no gráfico. Ou seja, uma vez calculado para si mesmo e a segunda vez para o indicador que o chama. O que é isso?
O seguinte é mostrado na figura. O comentário no topo é o valor do buffer no indicador principal no qual o cálculo ocorre, e a impressão (abaixo) é o mesmo buffer, mas apenas chamado em outro indicador e emitido na impressão. A diferença é significativa, MAS PORQUÊ!!!!!
o primeiro arquivo é o principal, o segundo chama o buffer a partir do primeiro....
o que eu faço agora ??? tenho uma estratégia baseada em canais - existe alguma alternativa de substituição?
o que eu faço agora ??? tenho uma estratégia baseada em canais - existe alguma alternativa de substituição?
Para vender, você pode incorporar com#resource
a capacidade de adicionar diferentes prazos a UMA folha (em janelas diferentes, mas em uma folha)
Por favor, informe para onde ir e onde cavar?) é possível através do mql ou da WInApi?
talvez haja exemplos do artigo que não consegui encontrar(
por favor, ajude-me a corrigir isso! ele dá erro 'Void' - declaração sem tipo 36 4 e onde rearranjar ou escrever retorno?
//
Void OnTick() {
O vazio é escrito com uma letra minúscula em vez de maiúsculas. Veja, é uma cor diferente. Coloque o cursor sobre esta palavra e pressione F1 - muitas vezes isso ajuda.
Tantas mensagens de erro aparecem após a correção... Eu corrigi as mensagens de erro, mas verifique você mesmo a lógica
O vazio é escrito com uma letra minúscula, não com uma letra maiúscula grande. Veja se é uma cor diferente. Coloque o cursor sobre esta palavra e pressione F1 - muitas vezes isso ajuda.
Depois de consertar tantas mensagens de erro aparecem... Consertou as mensagens de erro, mas verifique você mesmo a lógica
Muito obrigado, senhor!
A variável int contém exatamente o número de segundos desde 1970, enquanto a variável data/hora contém a data.
Se você precisar de uma determinada barra no histórico, então não importa como especificá-la - por data ou por número de segundos, em qualquer caso, a variável indicará o tempo de abertura desta barra em particular, independentemente da chegada de novos tiquetaques e da abertura de novas barras.
Descobri apenas agora que a função estatística é recalculada se o indicador for chamado de outro indicador, quando ambos estão no gráfico. Ou seja, uma vez calculado para si mesmo e a segunda vez para o indicador que o chama. O que é isso?
O seguinte é mostrado na figura. O comentário no topo é o valor do buffer no indicador principal no qual o cálculo ocorre, e a impressão (abaixo) é o mesmo buffer, mas apenas chamado em outro indicador e emitido na impressão. A diferença é significativa, MAS PORQUÊ!!!!!
o primeiro arquivo é o principal, o segundo chama o buffer a partir do primeiro....