Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 461

 
wolfovik:

Ajude a resolver um problema!

A EA no testador fica pendurada quando se usa a função ICustom. Existe alguma solução para o problema?

Também, no Testador de Estratégia, há um erro constante PB Trade EURUSD,H1: OrderSend error 130

Embora as paradas estejam em 300 pontos!

ticket = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,Bid-300*Point,Bid+300*Point);

Não funciona assim!

RefreshRates();
ticket = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,Bid-300*Point,Bid+300*Point);

Onde eu errei?


 
Dmitry01110:
Olá! Você poderia me dizer como editar um arquivo criado pela função FileOpen, por exemplo, excluir um byte da posição atual e inserir outro em seu lugar!


Também tentando fazer algo semelhante.

Há um arquivo *.csv com apenas uma coluna, ou seja, os dígitos nele vão abaixo um do outro. Estou tentando fazer com que cada vez que um dígito é usado, haja um ícone ao lado dele, indicando que este dígito já foi usado pela EA.

Você pode preparar um arquivo *.csv com duas colunas - [NÚMERO]; [SIGNIFICAR].

 
wolfovik:

Também no testador há um erro constante PB Trade EURUSD,H1: OrderSend error 130

Embora as paradas estejam a 300 pips!

Não funciona assim!

Onde eu errei?


Os preços calculados na ordem comercial devem ser normalizados para Dígitos:

ticket = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,NormalizeDouble(Bid-300*Point,Digits),NormalizeDouble(Bid+300*Point,Digits));

Você também precisa verificar a validade dos valores dos pedidos de parada em relação aos requisitos do StopLevel:

input int  StopLoss    =  300;   // Значение Stop Loss в пунктах
input int  TakeProfit  =  300;   // Значение Take Profit в пунктах
int   level=0, spread=0;
//+------------------------------------------------------------------+
//|   Старт                                                          |
//+------------------------------------------------------------------+
void OnTick() {
   level=MarketInfo(Symbol(),MODE_STOPLEVEL);
   spread=MarketInfo(Symbol(),MODE_SPREAD);
   if(level==0) level=spread*2;
//---
   int    ticket=0;
   double sl=0, tp=0;
   if(StopLoss>0) sl=NormalizeDouble(MathMin(Bid-StopLoss*Point,Bid-(level+1)*Point),Digits);
   if(TakeProfit>0) tp=NormalizeDouble(MathMax(Bid+TakeProfit*Point,Bid+(level+1)*Point),Digits);
   ticket = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,sl,tp);
   return;
}

Para comprar, aproximadamente como este

 
Dmitry01110:
Olá, você poderia me dizer como editar um arquivo criado com a função FileOpen, por exemplo, excluir um byte da posição atual e inserir outro em seu lugar!
Você chama o texto inteiro do arquivo para uma variável de string, edita-o como uma variável simples, depois chama aquele arquivo apenas para escrever e retorna aquela variável de volta.
 
Roger:
Você chama o texto inteiro de um arquivo para uma variável de string, edita-o como uma variável simples, depois chama aquele arquivo somente para escrita e devolve aquela variável de volta.

E se o número de caracteres no arquivo exceder o tamanho máximo de caracteres na variável string?
 
Eu descobri um pouco! Para substituir um valor em alguma posição de arquivo, basta colocar um ponteiro no byte anterior usando FileSeek, e então, usando FileWriteInteger, por exemplo, escrever ali um novo valor, que sobregravará o antigo. O principal é que valores antigos e novos devem ser do mesmo tamanho, por exemplo, LONG_VALUE para int.
 
Tive meu terminal atualizado hoje. Agora não consegue ver os indicadores... O que fazer e coloquei-o corretamente. Na mesma pasta (caminho) como antes.
 

for(int l = StringLen(tfs)-1; l >= 0; l--) { int char = StringGetChar(tfs,l); }

Há um erro no código. Por que o "char" faz o juramento? Como e com o que posso substituí-lo?

 
artmedia70:
E se o número de caracteres no arquivo exceder o tamanho máximo de caracteres na variável string?

Não há limite para a variável string. Ou melhor, há, mas é muito grande. Para o MT4 da construção 529 é de 2147483647 caracteres e 2 vezes menos se o MT4 estiver em OS de 32 bits. E nem sempre é assim. Existem chaves e PAE diferentes.

Dmitry01110:
Imaginei um pouco! Para substituir um valor em alguma posição de arquivo, basta colocar um ponteiro no byte anterior usando FileSeek e depois, usando FileWriteInteger, por exemplo, escrever ali o novo valor, que sobregravará o antigo. O principal é que os valores antigos e novos devem ser do mesmo tamanho, por exemplo, LONG_VALUE para int.
Sim, e para o CSV o número de caracteres deve corresponder.

Zolotai:

for(int l = StringLen(tfs)-1; l >= 0; l--) { int nChar = StringGetChar(tfs,l); }

Há um erro no código. Por que o "char" faz o juramento? Como e com o que posso substituí-lo?

 
cp
Razão: