Como codificar? - página 265

 

número de subjanela desconhecido

Olá colegas codificadores

Qualquer um que tenha uma solução para este problema com chamadas iCustom, eu tentei tudo o que pude pensar, mas ainda tenho a mesma mensagem na guia Especialistas.

número de subjanela desconhecido -1 para a função ObjectCreate

Cumprimentos à CJA

 

Remover as chamadas da subjanela no Indicador

cja:
Olá colegas codificadores

Qualquer um que tenha uma solução para este problema com chamadas iCustom, eu tentei tudo o que pude pensar, mas ainda tenho a mesma mensagem na guia Especialistas.

número de subjanela desconhecido -1 para a função ObjectCreate

Cumprimentos à CJA

Olá CJA,

Tenho uma solução que utilizo para contornar este problema.

O indicador que sua EA está chamando no iCustom está tentando encontrar uma subjanela para desenhar seus Objetos.

Na maioria dos casos, você não precisa que seu indicador desenhe nada, apenas fornecendo os valores do indicador à sua EA.

Minha solução é fazer uma cópia do indicador e excluir as chamadas da subjanela e as rotinas de desenho dos Objetos.

Isto elimina os erros da subjanela e faz com que a EA seja executada mais rapidamente também.

Em seguida, use este novo nome de indicador em suas declarações iCustom para sua EA.

Tenho certeza de que provavelmente há uma solução de código melhor, mas isto funciona para mim.

Espero que isto ajude,

Robert

 

Erros da subjanela iCustom

cosmiclifeform:
Olá CJA,

Tenho uma solução que utilizo para contornar este problema.

O indicador que sua EA está chamando no iCustom está tentando encontrar uma subjanela para desenhar seus Objetos.

Na maioria dos casos, você não precisa que seu indicador desenhe nada, apenas fornecendo os valores do indicador à sua EA.

Minha solução é fazer uma cópia do indicador e excluir as chamadas da subjanela e as rotinas de desenho dos Objetos.

Isto elimina os erros da subjanela e faz com que a EA seja executada mais rapidamente também.

Em seguida, use este novo nome de indicador em suas declarações iCustom para sua EA.

Tenho certeza de que provavelmente há uma solução de código melhor, mas isto funciona para mim.

Espero que isto ajude,

Robert

Obrigado Robert - sua sugestão funciona, mas suspeito que deve haver alguma outra forma de fazê-lo, embora eu tenha feito uma pesquisa na rede e não tenha encontrado soluções que funcionassem ou fizessem algum sentido, apenas muitas perguntas e nenhuma resposta. Portanto, obrigado mais uma vez por sua ajuda.

Cumprimentos ao CJA

 

CJA

Apenas uma sugestão : por que você não usa (quando chamado com iCustom()) um parâmetro para passar o número de janela desejado? Algo como : se (ParameterWindowID>=0) então é de iCustom que se faz algum código padrão.

Dessa forma você poderia forçá-lo a desenhar objetos mesmo quando chamado de outro código e ele desenharia objetos em um lugar correto.

 

Ajuda com a Codificação

Oi, pessoal.

Por favor, alguém pode me dizer se é possível usar BOLD textFONTtype no relatório de alerta por e-mail? Quando sim, como eu posso codificar isto?

Muito obrigado pela ajuda.

 
codersguru:
Você quer dizer como salvar em um arquivo CSV?

Verifique isto:

Ferramentas - leitor .csv

Olá, Guru,

Há algum lugar em seu site que eu possa baixar esta dll? Acho que esta é uma excelente ferramenta e tenho certeza que você pode escrevê-la melhor do que eu para que eu não me preocupe com ela. Obrigado antecipadamente.

Preciso me cadastrar? Esta está localizada na seção de download, mas eu não consegui descobrir como fazer o download de nada.

 

modificação rápida da EA

Hi,

Preciso de alguma ajuda, tentei mudar o código abaixo, mas a EA continuou a travar o MT4.

Quero que a ordem feche quando a barra atual (portanto, a barra onde a ordem foi executada) fechar. Basicamente, troque uma barra.

Este é o código original, ele negocia de sinal a sinal.

//+------------------------------------------------------------------+

//| Signal Begin(Exit Buy) |

//+------------------------------------------------------------------+

if (signaldown!=EMPTY_VALUE&&signaldown!=0) Order = SIGNAL_CLOSEBUY;

//+------------------------------------------------------------------+

//| Signal End(Exit Buy) |

//+------------------------------------------------------------------+

if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

continue;

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > Point * TrailingStop) {

if(OrderStopLoss() < Bid - Point * TrailingStop) {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

} else {

//Close

//+------------------------------------------------------------------+

//| Signal Begin(Exit Sell) |

//+------------------------------------------------------------------+

if (signalup!=EMPTY_VALUE&&signalup!=0) Order = SIGNAL_CLOSESELL;

//+------------------------------------------------------------------+

//| Signal End(Exit Sell) |

//+------------------------------------------------------------------+

if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

continue;

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {

if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {

OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

}

}

}

//+------------------------------------------------------------------+

//| Signal Begin(Entry) |

//+------------------------------------------------------------------+

//if (timeprev!=Time[0]){

// timeprev = Time[0];

if (signalup!=EMPTY_VALUE&&signalup!=0)

{

Order = SIGNAL_BUY;

}

if (signaldown!=EMPTY_VALUE&&signaldown!=0){

Order = SIGNAL_SELL;

}

// }

//+------------------------------------------------------------------+

//| Signal End |

//+------------------------------------------------------------------+

//Buy

if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Check free margin

if (AccountFreeMargin() < (100 * Lots)) {

Print("We have no money. Free Margin = ", AccountFreeMargin());

return(0);

}

if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;

if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);

if(Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("BUY order opened : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");

} else {

Print("Error opening BUY order : ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

//Sell

if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Check free margin

if (AccountFreeMargin() < (100 * Lots)) {

Print("We have no money. Free Margin = ", AccountFreeMargin());

return(0);

}

if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;

if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);

if(Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("SELL order opened : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");

} else {

Print("Error opening SELL order : ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

if (!EachTickMode) BarCount = Bars;

return(0);

}

//+------------------------------------------------------------------+

Alguém pode me ajudar?

 

Eu também encontrei este código,

if(data!=iTime(Symbol(),0,0))

{

if(signalup!=EMPTY_VALUE&&signalup!=0)

{

if(openpos()>0)

{

for(i=0;i<OrdersTotal();i++)

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

{

if(OrderType()==OP_SELL&&OrderSymbol()==Symbol()&&OrderMagicNumber()==mn)

{

if(OrderClose(OrderTicket(),lots,Ask,slip))

Print("short was closed");

}

}

}

Print("try open long");

Print(Symbol());

nt=OrderSend(Symbol(),OP_BUY,lots,Ask,slip,0,0,"ab",mn,0,Green);

if(nt>0)

Print("long order was opened");

}

if(signaldown!=EMPTY_VALUE&&signaldown!=0)

{

if(openpos()>0)

{

for(i=0;i<OrdersTotal();i++)

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

{

if(OrderType()==OP_BUY&&OrderSymbol()==Symbol()&&OrderMagicNumber()==mn)

{

if(OrderClose(OrderTicket(),lots,Bid,slip))

Print("long was closed");

}

}

}

Print("try open short");

Print(Symbol());

nt=OrderSend(Symbol(),OP_SELL,lots,Bid,slip,0,0,"ab",mn,0,Red);

if(nt>0)

Print("short was opened");

}

data=iTime(Symbol(),0,0);

}

//----

//----

return(0);

}

//+------------------------------------------------------------------+

int openpos()

{

int j=0;

int i,n;

n=OrdersTotal();

for(i=0;i<n;i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)

if(OrderSymbol()==Symbol()&&OrderMagicNumber()==mn&&(OrderType()==OP_SELL||OrderType()==OP_BUY))

j++;

}

return(j);

Algum especialista pode me dizer qual é o melhor escrito?

 

Quebra de equilíbrio para todas as encomendas de um par (mágico)

Olá a todos,

quero recolher todas as encomendas (compra e venda) de um par por magia e se elas atingirem um ponto de equilíbrio, todas as encomendas devem ser fechadas.

qualquer orientação muito bem-vinda, obrigado

Par Par Par ParBreakeven=verdadeiro;// Breakeven por par todas as ordens do mesmo par/mágico

ganho de pares duplos externos=6;// ganho em pips necessários para permitir o break even

Pareirbreak duplo externo=3;// break even, ordem fechada, 3 pip profit/slippage

duplo Parirmovebreakeven;

if(PairBreakeven==verdadeiro){

if(Parirbreakevengain>0)Pairmovebreakeven(Parirbreakevengain,Pairbreakeven);

CloseBuyOrders(Magic);

CloseSellOrders(Magic);

}

Vazio Parirmovebreakeven(duplo Parirbreakeven,duplo Parirbreakeven){

RefreshRates();

if(OrdersTotal()>0){

for(int i=OrdensTotal();i>=0;i++){

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic ){

retornar;

}

}

}

}

int CloseBuyOrders(int Magic){ //op_sell é similar

int total=OrdensTotal();

for(int cnt=total-1;cnt>=0;cnt--){

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if(OrderMagicNumber()==Magic && OrderSymbol()==Symbol()){

if(OrderType()==OP_BUY){

OrderClose(OrderTicket(),OrderLots(),Bid,3*mt);

}

}

}

retorno(0);

}

 

ArraySortar com 3 ou mais dimensões.

Algum especialista pode ajudar nisto?

Eu tentei usar o ArraySort com sucesso para 1 ou 2 dimensões. Mas fiquei preso com as 3 dimensões. Tanto quanto sei, o ArraySort usa apenas a primeira coluna para a ordenação. Alguém pode me aconselhar sobre como resolver esta ordenação de matrizes com 3 ou mais dimensões?

bool Restart = true;

double arraystore[20][20][20];

double ArrayActual[20] = {1.23,3.65,0.02,5.44,0.92,0.11,1.21,999.0,555.5,0.0001,44.221,1.01,0.002};

void init()

{

if (Restart == true)

{

Go();

Restart = false;

}

}

void start()

{

}

void Go()

{

for (int a = 1; a<=3; a++)

{

for (int b = 1; b<=6; b++)

{

int c = b+ (a-1)*6;

arraystore[a][0] = ArrayActual[c];

arraystore[a][1] = a;

arraystore[a][2] = b +a;

Print ( arraystore[a][0] + " . " + arraystore[a][1] + " . " + arraystore[a][2]);

}

}

ArraySort(arraystore,WHOLE_ARRAY,1,MODE_DESCEND);

for ( a = 1; a<=3; a++)

{

for ( b = 1; b<=6; b++)

{

Print ( arraystore[a][0] + " . " + arraystore[a][1] + " . " + arraystore[a][2]);

}

}

}
Razão: