[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 254

 
Desead:
Pessoal, antes no editor, quando você pairava sobre uma palavra reservada e pressionava f1 uma janela se abriria na parte inferior com uma descrição da função, agora eu não tenho isto. Qual poderia ser o problema?
Anteriormente, você pressionou CTRL+F1.
 
Quem pode me dizer como fazer o resultado sempre positivo ? (Comprar lotes - Vender lotes)= -0,25, mas eu quero que seja sempre positivo ?
 
mikanit:
Quem pode me dizer como fazer o resultado sempre positivo ? (Comprar lotes - Vender lotes)= -0,25, mas deve ser sempre positivo ?
MathAbs().
 

Eu o faço: if (profitbuy+profitsell > SymbProf_magBUY_magSELLL* MathAbs((OrdensTotalMagicBuyLots(MagicBuy)-OrdersTotalMagicSellLots(MagicSell))/Lots)())

o que está entre parênteses?

 

if (profitbuy+profitsell > SymbProf_magBUY_magSELLL* MathAbs((OrdensTotalMagicBuyLots(MagicBuy)-OrdersTotalMagicSellLots(MagicSell))/Lots)(??????))

Onde ???? o quê?

 
Obrigado, está ordenado.
 

Abro uma posição com um volume = 0,05. Precisa de um código - como reduzir o volume da posição em 0,01 quando uma perda atinge 100 pips por 5 dígitos ????

Obrigado.

 

Quantos EAs eu escrevi, todos eles verificam as condições do mercado (stoplevel, spread, etc.) ao negociar com ordens. Eu olhei como os gridders são escritos, mas não vi nenhum deles verificar o valor do mesmo stop levelling antes de enviar qualquer pedido. Qual é a razão?

 
alsu:

Há muitos metaris no fórum sobre o testador e por que seus resultados diferem da vida real. Veja na seção Artigos, este tópico já foi abordado mais de uma vez.

Obrigado.
 

Encontrei uma alternativa.

alsu:

Isso significa que na DLL a cadeia é passada exatamente como char*, mas não como MqlStr. Mas issonão significa que no programa ex4 a cadeia não é armazenada como MqlString. Em geral, a transferência de parâmetros do ex4 para dll (de acordo com os desenvolvedores) é um processo bastante complexo, acompanhado de todos os tipos de verificações e transformações de parâmetros.

Zhunko:

Você já leu a Referência MQL4? A corda MQL4 é a mesma que a corda c com terminal nulo.

A estrutura foi projetada apenas para arranjar conjuntos de cordas. Pura invenção das Metaquotas para facilitar a criação de matrizes de cordas.

StrStrA da biblioteca shlwapi.dll. Teste:

#property indicator_chart_window
#import "stdlib.ex4"
string IntegerToHexString(int integer_number);//это для перевода десятичного формата в шестнадцатеричный, используем в print.
#import "StrAddress.dll"
int GetStrAddress(string szStr);//из самописной dll.
#import "shlwapi.dll"
int StrStrA(string pszFirst, string pszSrch);//из WinAPI.
#import

int addr1;//будет выходной переменной для функции из самописной dll.
int addr2;//то же самое для функции из WinAPI.

int init()
  {//тестовый прогон; в init(), это чтобы не повторялось
   string s; strAddress (s);
   s=""; strAddress (s);
   s=s+"something"; strAddress (s);
   s="MyStr"; strAddress (s);
   s="mystr"; strAddress (s);
   return(0);
  }

int start()
  {
   int    counted_bars=IndicatorCounted();//оставляем блок пустым
   
   return(0);
  }

void strAddress (string myStr)//тестовая функция
  {
   addr1=GetStrAddress(myStr);//эта из dll
   addr2=StrStrA(myStr,myStr);//эта из WinAPI
   Print(" строка ", CharToStr(34), myStr, CharToStr(34), " указатель 1: ", IntegerToHexString(addr1), ", указатель 2: ", IntegerToHexString(addr2));//в лог
  }

Diário de bordo:

строка "" указатель 1: 00000000, указатель 2: 00000000
строка "" указатель 1: 043 BE440, указатель 2: 00000000
строка "something" указатель 1: 043 C8970 указатель 2: 043 C8970
строка "MyStr" указатель 1: 043 BE450, указатель 2: 043 BE450
строка "mystr" указатель 1: 043 BE458, указатель 2: 043 BE458

строка "" указатель 1: 00000000, указатель 2: 00000000
строка "" указатель 1: 01 C980E0, указатель 2: 00000000
строка "something" указатель 1: 01 CDD050, указатель 2: 01 CDD050
строка "MyStr" указатель 1: 01 C980F0, указатель 2: 01 C980F0
строка "mystr" указатель 1: 01 C980F8, указатель 2: 01 C980F8

строка "" указатель 1: 00000000, указатель 2: 00000000
строка "" указатель 1: 01 CAFF20, указатель 2: 00000000
строка "something" указатель 1: 01 CA7100, указатель 2: 01 CA7100
строка "MyStr" указатель 1: 01 CAFF30, указатель 2: 01 CAFF30
строка "mystr" указатель 1: 01 CAFF38, указатель 2: 01 CAFF38

O mecanismo é o seguinte. Shlwapi.dll in /system32. StrStrA é um análogo WinAPI doStringSubstr. MQL4 é uma linguagem sem digitação, então se definirmos uma int na saída, ao invés de uma string, obtemos um ponteiro para ela, não uma string. StrStrA procura a primeira ocorrência de um substrato na corda (sensível a maiúsculas e minúsculas, mas como nossas cordas são as mesmas, não nos importamos), e como nossas cordas são as mesmas, ele devolve um ponteiro ao primeiro caracter da corda, ou seja, à própria corda.

Deixe-me explicar para aqueles que estarão usando este código. Não existe um formato de corda no WinAPI. Em vez disso, existe apenas o formato lpsz (um ponteiro para o primeiro elemento de um conjunto de caracteres terminando com 0x00, também conhecido como /0). É um ponteiro para um endereço de memória. Como nossas células de memória são de 32 bits (ou seja, 4 bytes) e a int também tem 4 bytes de tamanho, tudo se encaixa perfeitamente ali.

Conclusão: você pode facilmente embalar as cordas em arrays int, emulando assim estruturas (e não há estruturas e classes na MQL4) para passá-las adiante para a dll, se uma estrutura ou classe for necessária. A dll autoescrita para tradução do tipo de dados (isto é, construções como "int(const char*)" (tradução tipo C) ou similares em C++) não pode ser usada agora.