[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 116

 
Roman.:

Rapazes, vocês podem me dizer por que pode haver um erro ao não poder abrir um indicador em um EA?

Esta condição é cumprida:

-Lista de parâmetros (se necessário). Os parâmetros transmitidos devem corresponder à ordem de declaração e ao tipo de variáveis externas (externas) do indicador personalizado.


Você deve verificar o nome do indicador. Poderia ser
 
Vinin:

Eu teria que verificar o nome do indicador. Eu não sei o que pode ser.


Eu verifiquei o nome. Está tudo bem. Descobrindo isso...

P.S. Eu instalei um terminal DC de cinco dígitos, movi tudo para lá, verifiquei tudo novamente, muitas edições de código, não ocorre mais nenhum erro desse tipo.

 
O MQL programming gurus, ajuda um recém-chegado a resolver um problema. O programa não funciona corretamente, não faz o que é suposto fazer. Você poderia me dizer qual é o meu erro? As necessidades do programa:
1. Abra um pedido e atribua o valor do preço de abertura à variável PriceBuy e exiba uma mensagem sobre ela.
2. Abra um novo pedido com as mesmas condições quando TakeProfit for alcançado.
Aqui está o código do programa:

external double PriceBuy = 0;
external bool Buy = true;
external bool number = false;

int start()
{
if(Buy)
{
int ticket=OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Bid-100*Point,Bid+100*Point);
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)
PriceBuy=OrderOpenPrice();
Alert("Buy Price = ",PriceBuy);
Buy = false;
number = true;}

if (Bid+100*Point<=PriceBuy && number)
{PriceBuy = 0;
number = false;
Buy=true;}


retorno;
}
Obrigado de antemão
 
OTPOK:

O MQL programming gurus, ajuda um recém-chegado a resolver um problema. O programa não funciona corretamente, não faz o que é suposto fazer. Você poderia me dizer qual é o meu erro? O programa precisa fazer isso:
1. abrir uma ordem e atribuir o valor do preço aberto à variável PriceBuy e exibir uma mensagem sobre ela.
Para abrir um novo pedido com as mesmas condições quando TakeProfit for alcançado.
Aqui está o código do programa:


duplo PriceBuy externo = 0;
bool externo Comprar = verdadeiro;
número do bool externo = falso;

int start()
{
se(Comprar)
{
int ticket=OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Ask-100*Point,Ask+100*Point);
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
PriceBuy=OrderOpenPrice();
Alerta("Preço de Compra = ",PriceBuy);
Comprar = falso;
número = verdadeiro;}

if(Bid+100*Point<=PriceBuy && number)
{PriceBuy = 0;
número = falso;
Comprar=verdadeiro;}


retornar;
}
Obrigado de antemão

Licitação>=PreçoCompra+100*Ponto
 

Eu quero conectar a função CreateNamedPipe() do kernel32.dll. Eu preciso prescrever bandeiras do tipo Dword.

Estou fazendo desta maneira:

#define ACCESS_SYSTEM_SECURITY 0x01000000L

Naturalmente, o compilador jura no L no final. Você poderia me dizer o que fazer?

 
Vinin:

Tenho que verificar o nome do indicador. Pode ser.


Sim, realmente, Victor, meu erro foi que tentei resolver isso automaticamente... :-) )) para o indicador via

...
string short_name;
...
short_name="NonLagMA";
IndicatorShortName(short_name);
...

... Como resultado, os nomes "curto" e "normal" não correspondem ao endereçamento aos valores do indicador através de iCustom(), ou seja, quando eles não coincidem, o indicador deve ser endereçado somente pelo seu nome "normal".

Obrigado.

 

Olá.

Por favor, ajude-me a encontrar um erro.

O código é projetado para fechar todas as posições quando o preço cruza a linha traçada no gráfico. Na maior parte do tempo, ele faz. Mas periodicamente há 2 falhas: 1. O preço atravessa a linha, mas as posições não são fechadas. 2. A linha intercepta o nível de preço atual (em um ângulo), mas não coincide com ele (não afeta a vela atual), enquanto todas as posições estão fechadas (o que não deveria acontecer).

int start() {
//============== Закрытие по линии Close ========================================
   int bar1,bar2,bar3;
   if (Draw_Close && ObjectFind("LINES CLOSE")==-1)
   {
      bar3 = searcFR(0,1);bar2 = searcFR(bar3,-1);bar1 = searcFR(bar2,1);
      drawline("LINES CLOSE",Color_Close,Time[bar1],High[bar1]+15*Point,Time[bar3],High[bar3]+15*Point);
   }
   string order = checkapp();
   if (order=="LINES CLOSE")
   {DeleteAllOtlozh_b();
    CloseAll_b(DeleteOtlozh,Proskalz);
    ObjectDelete("LINES CLOSE");
    ObjectDelete("LINES CLOSE n");
    Draw_Close  = false;
    if(UseAlert){
    Alert("Уровень достигнут, заблокирован");
    } 
   } 
}     
//==================================================================================


//=========== Вычисление линии Close  =================================================================
int searcFR(int bar, int UP_DN)
{  while(true)//ищем 1 фрактал после bar
   {  bar++;
      if (Fractal(bar) == UP_DN) return(bar);} 
   return(0);  
}
//--------------------------------------------------------------------------
int Fractal(int br)
{  if (br <= 2) return(0);
   if (High[br] >= High[br+1] && High[br] > High[br+2] && High[br] >= High[br-1] && High[br] > High[br-2]) return( 1);
   if (Low [br] <= Low [br+1] && Low [br] < Low [br+2] && Low [br] <= Low [br-1] && Low [br] < Low [br-2]) return(-1);
   return(0);
}
//-------------------------------------------------------------------
int drawline(string Name, color col,int X1,double Y1,int X2,double Y2)
{
   if (ObjectFind(Name)==0)return; //Если обьект существует
   int X1g=Time[0];
   int X2g=Time[0]+Period()*1200;
   double Y1g=Y1+(Y2-Y1)*(X1g-X1)/(X2-X1);
   double Y2g=Y1+(Y2-Y1)*(X2g-X1)/(X2-X1);
   ObjectCreate(Name, OBJ_TREND, 0,X1g,Y1g,X2g,Y2g);
   ObjectSet   (Name, OBJPROP_COLOR, col);
   ObjectSet   (Name, OBJPROP_STYLE, STYLE_SOLID);
   ObjectSet   (Name, OBJPROP_WIDTH, 2);
   ObjectSet   (Name, OBJPROP_BACK,  false);
   ObjectSet   (Name, OBJPROP_RAY,   false);
   return;
}
//----------------------------------------------------------------------- проверка всех линий
string checkapp()
{
   int X_1,X_2,X_3;
   double Y_1,Y_2,Y_3;
   double shift_Y = (WindowPriceMax()-WindowPriceMin()) / 50;
   color col;
   for(int n=ObjectsTotal()-1; n>=0; n--) 
   {
      string Obj_N=ObjectName(n);
      if (ObjectType(Obj_N)!=OBJ_TREND) continue;
      if (StringFind(Obj_N,"LINES ",0)!=-1)//найден обьект-тренд к которому вычисляется приближение
      {
         X_1 = ObjectGet(Obj_N, OBJPROP_TIME1); 
         X_2 = ObjectGet(Obj_N, OBJPROP_TIME2); 
         ObjectDelete (Obj_N+" n");
         if (X_1>X_2 ||  X_2<Time[0]) {continue;}//ObjectDelete(Obj_N);
         Y_1 = ObjectGet(Obj_N, OBJPROP_PRICE1);
         Y_2 = ObjectGet(Obj_N, OBJPROP_PRICE2);
         col= ObjectGet(Obj_N, OBJPROP_COLOR);
         ObjectCreate (Obj_N+" n", OBJ_TEXT,0,X_1-Period()*60,Y_1+shift_Y,0,0,0,0);
         ObjectSetText(Obj_N+" n",StringSubstr(Obj_N,6,5) ,7,"Arial");
         ObjectSet    (Obj_N+" n", OBJPROP_COLOR, col);
         if (X_1<=Time[0] && X_2>=Time[0])//попадает во временной диапазон
         {
            X_3=Time[0];Y_3=Y_1+(Y_2-Y_1)*(X_3-X_1)/(X_2-X_1);//уравнение прямой
            if (Y_3>=Bid&&Y_3<=Ask)
            { 
               return(Obj_N);
            }
         }
      }
   }
}

Agradeço antecipadamente.

 
nemo811:

Por favor, ajude-me a encontrar o erro.

Retirando a pergunta, eu a descobri.

 
toropchin:

Eu quero conectar a função CreateNamedPipe() do kernel32.dll. Eu preciso prescrever bandeiras do tipo Dword.

Estou fazendo desta maneira:

#define ACCESS_SYSTEM_SECURITY 0x01000000L

Naturalmente, o compilador jura no L no final. O que você sugere?

Zhunko:

Remover o dígito. Só pode haver 8 bits. A MQL4 não funciona com as grandes.

Você precisa remover um zero extra. Experimente assim: 0x1000000L


Não funciona assim. Compilador dá erro '0x1000000L' - número inválido
 
toropchin:

Não funciona dessa maneira. O compilador gera o erro '0x1000000L' - número inválido

Sem pensar nada durante a noite... :-)) Não existe tal número no sistema de 16 bits. É um identificador de um tipo constante.

L deve ser removido:0x01000000

Razão: