[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 863

 
IgorM:

qual é a melhor maneira de salvar dados/variáveis importantes em caso de desligamento do terminal (queda de energia)?

- variáveis globais do terminal? para um arquivo?

- com que freqüência eles precisam ser salvos? (o último valor patrimonial e alguns bools são importantes)

Qual é o problema, tudo para um array, e o array para um arquivo em cada tick, leia o arquivo na inicialização, e sem problemas
 

Olá!

Não consigo entender porque não posso modificar uma posição aberta, eu digitei a ordem (na função selecionar ordem)

//+------------------------------------------------------------------+
|| news trade.mq4 |
//| Copyright © 2010, MetaQuotes Software Corp.
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#direitos autorais "Copyright © 2010, MetaQuotes Software Corp.
#link da propriedade "http://www.metaquotes.net"


bool externo In_BUYSTOP=true;
extern intProfit_buy=100;
externo int StopLoss_buy=5;
duplo externo Lots_buy=0,01;
//+------------------------------------------------------------------+
bool externo In_SELLSTOP =true;
Exterior inttern TakeProfit_sell=100;
externo int StopLoss_sell =5;
venda dupla externa Lotes_sell =0,01;
nível de lucro int externo = 25; // - nível de lucro em pontos, que é necessário atingir para transferir sua parada para o nível de Breakeven.
NívelWLoss int externo = 1; // - Nível de equilíbrio em pontos, para o qual a posição de parada será movida após seu lucro atingir o nível LevelProfit em pontos.

//+------------------------------------------------------------------+
//| função de iniciação de especialista |
//+------------------------------------------------------------------+
int init()
{
//----
int profitbuy=((Bid - OrderOpenPrice())/Point); // COMPRAR
int profitell=((OrderOpenPrice()- Ask)/Point); // SELL
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| função de desinicialização especializada |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| função de início especializado |
//+------------------------------------------------------------------+
int start()
//----
{
int ticket;
if (Licitação >iHigh(NULL,PERÍODO_D1,1))
{
if(OrdensTotal() < 1)
ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots_sell,iHigh(NULL,PERIOD_D1,1),3,iHigh(NULL,PERIOD_D1,1)+StopLoss_sell*Point,iHigh(NULL,PERIOD_D1,1)-TakeProfit_sell*Point,Hour() == 21 && Minute() == 59)
}
se (Pergunte <iLow(NULL,PERÍODO_D1,1))
{
if(OrdensTotal() < 1)
ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots_buy,iLow(NULL,PERIOD_D1,1),3,iLow(NULL,PERIOD_D1,1)-StopLoss_buy*Point,iLow(NULL,PERIOD_D1,1)+TakeProfit_buy*Point,Hour() == 21 && Minute() == 59)
}
retorno(0);
}
//+------------------------------------------------------------------+
if(OrderSelect(0, SELECT_BY_POS,MODE_TRADES)==verdadeiro)
{
int order_type=OrderType();
order_type=OP_SELL;
int profitell=((OrderOpenPrice()- Ask)/Point);
se (profitell>5)
ticket=OrderModify(OrderTicket(),OrderOpenPrice(),0,OrderTakeProfit(),0,Blue);
retorno(0);
}
if(OrderSelect(0, SELECT_BY_POS,MODE_TRADES)==verdadeiro)
{
order_type=OP_BUY;
int profitbuy=((Bid - OrderOpenPrice())/Point);
se (profitbuy>5)
int stopmodify=OrderOpenPrice();
OrderModify(OrderTicket(),OrderOpenPrice(),stopmodify,OrderTakeProfit(),0,Blue);
retorno(0);
}
 

Caros desenvolvedores, uma pergunta para vocês.

Não consigo fazer com que a variável global do indicador funcione corretamente quando chamo o indicador de um Consultor Especialista.

Aqui está o código do indicador (apenas as cordas que são importantes para a compreensão da questão).

double  price;
double  PriceBuffer[];

int init()
{
   SetIndexBuffer(0,PriceBuffer);
   return(0);
}
int start()
{
   int limit, i;
   int counted_bars=IndicatorCounted();
   
   //---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;

   for(i=limit-1; i>=0; i--)
   {
        PriceBuffer[i] = price;
        price = iClose(NULL,0,i);
   }
   return(0);
}

Em cada barra ele economiza o preço atual no preço variável global e o exibe na barra seguinte. Assim, devemos ver a tabela de preços atrasada por uma barra. Se anexarmos o indicador ao gráfico, tudo funciona de forma justa:

Mas se este indicador for chamado da EA e realizar um teste visual, veremos ao final do teste: o indicador é apenas ligeiramente semelhante ao que deveria ser.

Se agora recalcularmos o indicador no gráfico de teste visual (por exemplo, abrir e fechar suas propriedades), tudo volta ao normal - vemos a primeira imagem novamente.

O que eu estou fazendo de errado?

Eu fiz uma busca, mas não encontrei nenhuma resposta.

Eu uso a versão MT4 4.00 Build 226.

 
Acho que é porque não há carrapatos suficientes na história. É por isso que está faltando. Em tempo real tudo deve estar claro! ;)
 

Olá, favor informar onde no código há imprecisão, pois há um erro no registro quando o script está sendo executado:

15:40:29 11dP_símbolo_real EURUSD,H4: <--- 2 gráficos corretos encontrados. --->

15:40:29 11dP_símbolo_real EURUSD,H4: <--- Para ver os resultados, abra o gráfico EURUSD,M1002 --->

15:40:29 11dP_símbolo_real EURUSD,H4: o nome do símbolo para a função MarketInfo deve ser uma cadeia

15:40:29 11dP_símbolo_real: parâmetro de string vazio para a função FileWriteString

15:40:29 11dP_símbolo_real EURUSD,H4: o nome do símbolo para a função MarketInfo deve ser uma cadeia

15:40:29 11dP_símbolo_real EURUSD,H4: <--- Para ver resultados, abrir gráficos,M1002 --->

15:40:29 11dP_símbolo_real EURUSD,H4: o primeiro parâmetro para a função WindowHandle deve ser uma string inicializada

15:40:30 11dP_símbolo_real EURUSD,H4: o primeiro parâmetro para a função WindowHandle deve ser uma string inicializada

15:40:31 11dP_símbolo_real EURUSD,H4: o primeiro parâmetro para a função WindowHandle deve ser uma string inicializada

Estou anexando o próprio código abaixo:

Arquivos anexados:
11dp.mq4  15 kb
 
IgorM:

qual é a melhor maneira de salvar dados/variáveis importantes em caso de desligamento do terminal (queda de energia)?

- variáveis globais do terminal? para um arquivo?

- com que freqüência eles precisam ser salvos? (o último valor patrimonial e alguns bools são importantes)


Ao contrário de outras variáveis, uma variável GV não só pode ser criada a partir de qualquer programa, mas também pode ser excluída. O valor da variável GV permanece no disco rígido do computador, mesmo depois que o terminal do cliente é fechado. Uma vez declarada a variável GV existe no terminal do cliente por 4 semanas desde a última chamada. Se nenhum programa acessou a variável GV durante este período, a variável GV é excluída pelo terminal do cliente. Uma variável GV só pode ser do tipo duplo.
 
etroplus:

Olá!

Não consigo entender porque não posso modificar uma posição aberta, eu digitei a ordem (na função selecionar ordem)

//+------------------------------------------------------------------+
|| news trade.mq4 |
//| Copyright © 2010, MetaQuotes Software Corp.
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#direitos autorais "Copyright © 2010, MetaQuotes Software Corp.
#link da propriedade "http://www.metaquotes.net"


bool externo In_BUYSTOP=verdadeiro;
extern intProfit_buy=100;
externo int StopLoss_buy=5;
duplo externo Lots_buy=0,01;
//+------------------------------------------------------------------+
bool externo In_SELLSTOP =true;
Exterior inttern TakeProfit_sell=100;
externo int StopLoss_sell =5;
venda dupla externa Lotes_sell =0,01;
nível de lucro int externo = 25; // - nível de lucro em pontos, que é necessário atingir para transferir sua parada para o nível de Breakeven.
NívelWLoss int externo = 1; // - Nível de equilíbrio em pontos, para o qual a posição de parada será movida após seu lucro atingir o nível LevelProfit em pontos.

//+------------------------------------------------------------------+
//| função de iniciação de especialista |
//+------------------------------------------------------------------+
int init()
{
//----
int profitbuy=((Bid - OrderOpenPrice())/Point); // BUY é redundante, primeiro todas as variáveis são iguais a 0
int profitell=((OrderOpenPrice()- Ask)/Point); // SELL
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| função de desinicialização especializada |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| função de início especializado |
//+------------------------------------------------------------------+
int start()
//----
{
int ticket;
if (Licitação >iHigh(NULL,PERÍODO_D1,1))
{
if(OrdensTotal() < 1)
ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots_sell,iHigh(NULL,PERIOD_D1,1),3,iHigh(NULL,PERIOD_D1,1)+StopLoss_sell*Point,iHigh(NULL,PERIOD_D1,1)-TakeProfit_sell*Point,Hour() == 21 && Minute() == 59)
}
se (Pergunte <iLow(NULL,PERÍODO_D1,1))
{
if(OrdensTotal() < 1)
ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots_buy,iLow(NULL,PERIOD_D1,1),3,iLow(NULL,PERIOD_D1,1)-StopLoss_buy*Point,iLow(NULL,PERIOD_D1,1)+TakeProfit_buy*Point,Hour() == 21 && Minute() == 59)
}
retorno(0);
}
//+------------------------------------------------------------------+
if(OrderSelect(0, SELECT_BY_POS,MODE_TRADES)==verdadeiro)
{
int order_type=OrderType();
order_type=OP_SELL;// talvezse(order_type===OP_SELL), então mais parênteses são necessários
int profitell=((OrderOpenPrice()- Ask)/Point);
se (profitell>5)// entãovocê tentará modificar o pedido a cada tick?
ticket=OrderModify(OrderTicket(),OrderOpenPrice(),0,OrderTakeProfit(),0,Blue);
retorno(0);
}
if(OrderSelect(0, SELECT_BY_POS,MODE_TRADES)==verdadeiro)
{
order_type=OP_BUY;
int profitbuy=((Bid - OrderOpenPrice())/Point);
se (profitbuy>5)
int stopmodify=OrderOpenPrice();
OrderModify(OrderTicket(),OrderOpenPrice(),stopmodify,OrderTakeProfit(),0,Blue);
retorno(0);
}
 
Olá, favor informar onde no código há imprecisão, pois há um erro no registro quando o script está sendo executado:


15:40:29 11dP_símbolo_real EURUSD,H4: <--- 2 gráficos corretos encontrados. --->

15:40:29 11dP_símbolo_real EURUSD,H4: <--- Para ver os resultados, abra o gráfico EURUSD,M1002 --->

15:40:29 11dP_símbolo_real EURUSD,H4: o nome do símbolo para a função MarketInfo deve ser uma cadeia

15:40:29 11dP_símbolo_real: parâmetro de string vazio para a função FileWriteString

15:40:29 11dP_símbolo_real EURUSD,H4: o nome do símbolo para a função MarketInfo deve ser uma cadeia

15:40:29 11dP_símbolo_real EURUSD,H4: <--- Para ver resultados, abrir gráficos,M1002 --->

15:40:29 11dP_símbolo_real EURUSD,H4: o primeiro parâmetro para a função WindowHandle deve ser uma string inicializada

15:40:30 11dP_símbolo_real EURUSD,H4: o primeiro parâmetro para a função WindowHandle deve ser uma string inicializada

15:40:31 11dP_símbolo_real EURUSD,H4: o primeiro parâmetro para a função WindowHandle deve ser uma string inicializada

Estou anexando o próprio código abaixo:
Arquivos anexados:
11dp_1.mq4  15 kb
 

Por favor, me diga o que significa "OP BUY" -variável - esperado

aqui enquanto(diferença>Span)
( OrderSend (string symbol, OP_BUY, volume, double price, slippage,Bid-stoploss*Point,
Bid+takeprofit*Point, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=Red) )

while(0-diferent>Red)
( OrderSend (string symbol, OP_SELL, volume, double price, slippage,Ask+stoploss*Point,
Ask-takeprofit*Point, string comment=NULL, string comment=0, int magic=0, datetime expiration=0, color arrow_color=Black) )

 
Como eu escrevo um ponto no gráfico em mql4? Preciso escrever o preço e o tempo para que ele permaneça no lugar a qualquer momento
Razão: