Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
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
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 à CJAOlá 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
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,
RobertObrigado 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.
Você quer dizer como salvar em um arquivo CSV?
Verifique isto:
Ferramentas - leitor .csvOlá, 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]);
}
}
}