[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 259
paladin80: Deve fechar em uma parada de perda. O Forex abre às 00:00 GMT.
Mas fechará não ao preço stopLoss, mas ao primeiro preço, que pode ser muito mais baixo do que o stopLoss! E a TakeProfit fechará com certeza. Portanto, é melhor não sair com o StopLoss, e ainda melhor não deixar posições para o fim de semana!
Como posso descobrir o endereço da minha função de usuário? Isto é, se minha lista diz
int start()
...
int num=myFunc()//вызов функции
...
int myFunc()//описание моей функции
{
...
}
então como posso obter o endereço do meuFunc? Preciso dele para saber como encontrar o endereço do WndProc (descrevo com função personalizada) para passar mais adiante ao parâmetro de classe.
Como posso descobrir o endereço da minha função de usuário? Isto é, se minha lista diz
então como posso obter o endereço do meuFunc? Preciso dele para saber como encontrar o endereço do WndProc (descrevo com função personalizada) para passar mais adiante ao parâmetro de classe.
Quem diz que ele tem sequer um endereço? é uma função MQL4: ele não é compilado nem no sentido literal da palavra, mas passa pelo intérprete em tempo de execução.
Quem disse que ele tem sequer um endereço? É uma função MQL4: não é nem mesmo compilado no sentido literal da palavra, mas passa pelo intérprete em tempo de execução.
É lá que o cão é enterrado. Só lamento por 2 ou 3 semanas de perda de tempo, porque escolhi uma interface de janelas independente para meu robô dentro da MQL4+WinAPI sem nenhuma dll autoescrita. Desculpe não ter percebido antes, desculpe por meu código e desenvolvimentos.
Para resumir. Você não pode criar uma janela sobreposta (ou seja, não uma criança) sem copiar o código em sua dll, porque ao descrever WNDCLASS (ou WNDCLASSEX)
typedef struct tagWNDCLASSEX {// это с MSDN
UINT cbSize;
UINT style;
WNDPROC lpfnWndProc;//<-
int cbClsExtra;
int cbWndExtra;
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCTSTR lpszMenuName;
LPCTSTR lpszClassName;
HICON hIconSm;
} WNDCLASSEX, *PWNDCLASSEX;
linhas indicadas pela seta ao embalar a estrutura em uma matriz int
lpwcx[0]=0x30;//cbSize// это на MQL4
lpwcx[1]=0x0A23;//style//lpwcx[2]=lpfnWndProc;<-
lpwcx[3]=0;//cbClsExtra
lpwcx[4]=0;//cbWndExtra
lpwcx[5]=GetModuleHandleA(lpModuleName);//hInstance
lpwcx[6]=LoadIconA(hInstance,IDI[0]);//hIcon
lpwcx[7]=LoadCursorA(hInstance,IDC[0]);//hCursor
lpwcx[8]=GetStockObject(WHITE_BRUSH);//hbrBackground
lpwcx[9]=StrStrA(lpszMenuName,lpszMenuName);
lpwcx[10]=StrStrA(lpszClassName,lpszClassName);
lpwcx[11]=0;//hIconSm//передаём структуру в упакованном интовом массиве и регистрируем класс
atom=RegisterClassExA(lpwcx[12]);
o endereço do procedimento de janela, ou seja, o manipulador de mouse e teclado para esta janela, é passado. Um procedimento de janela na MQL4 pode ser implementado como uma função definida pelo usuário, mas é impossível obter seu endereço dentro do intérprete, de modo que não há nada a passar. O máximo que é possível na MQL4 é usar as classes de janelas padrão, mas elas serão usadas somente como janelas para crianças. Para simplificar, uma janela criada pelo indicador não pode ser agarrada com um mouse e colocada sobre a borda do terminal (já que será uma janela infantil), enquanto uma janela sobreposta pode ser colocada sobre a borda do terminal. A janela infantil nas classes de janela padrão já está implementada na mt4gui.dll, se alguém precisar. Mas a janela sobreposta com seu próprio mouse e manipulador de teclado é impossível.
Peço aos moderadores que coloquem este diálogo e todas as mensagens relacionadas a um tópico separado como "como criar uma janela na MQL4", para que outros não cometam os mesmos erros e possam encontrá-la em um mecanismo de busca.
O corretor lê o endereço ip do computador do comerciante somente no modo on-line ou é tecnicamente possível carregar o histórico de alguma pasta no MT4?
Decidi implementar "hotkeys" (sem usar as teclas de controle como Ctrl, Alt, Shift). Mas o código não funciona.
#property indicator_chart_window#import "user32.dll"bool RegisterHotKey(int hWnd, int id, int fsModifiers, int vk);
bool PeekMessage (int& lpMsg[7], int hWnd, int wMsgFilterMin, int wMsgFilterMax, int wRemoveMsg);
bool UnregisterHotKey (int hWnd, int id);
#importexternstring s0="идентификатор горячей клавиши";
externint id;
externstring s1="код клавиши (список см. winuser.h)";
externint vk;
externstring s2="номер окна (от нуля до WindowsTotal()-1)";
externint aWindowNumber;
bool PM;
int init()
{
ObjectCreate("Smile",OBJ_LABEL,aWindowNumber,0,0);
ObjectSet("Smile",OBJPROP_XDISTANCE,0);
ObjectSet("Smile",OBJPROP_YDISTANCE,0);
ObjectSetText("Smile", StringSetChar("", 0, 75), 50, "WingDings", Red);
return(RegisterHotKey(WindowHandle(Symbol(), Period()), id, 0, vk));
}
int deinit()
{
ObjectDelete("Smile");
WindowRedraw();
return(UnregisterHotKey(WindowHandle(Symbol(), Period()), id));
}
int start()
{
int lpMsg[7];
/*
Структура lpMsg для WM_HOTKEY:
0 - хэндл окна//HWND(MSDN)//int(MQL4)
1 - WM_HOTKEY (0x0312)//UINT(MSDN)//int(MQL4) 2 - заданный id//WPARAM(MSDN)//int(MQL4) 3 - млардшее слово - ноль (модификатор, - не задаём), старшее - код виртуальной клавиши//LPARAM(MSDN)//int(MQL4) 4 - время//DWORD(MSDN)//int(MQL4) 5 - координата х мышки//структура POINT. LONG(MSDN)//int(MQL4) 6- координата у мышки//LONG(MSDN)//int(MQL4)
*/
PM=PeekMessage(lpMsg, WindowHandle(Symbol(), Period()), 0, 0, 1);//1 = PM_REMOVEif (lpMsg[1]==0x0312){
if(lpMsg[2]==id){
switch(StringGetChar(ObjectDescription("Smile"),0)){
case74 : ObjectSetText("Smile", StringSetChar("", 0, 75), 50, "WingDings", Red);
case75 : ObjectSetText("Smile", StringSetChar("", 0, 74), 50, "WingDings", Red);
}
}
}
return(0);
}
Por que não funcionaria? Em teoria, o sorriso é suposto mudar. Eu defini 81 (código chave Q), mas você pode definir qualquer coisa lá. Aqui estão os códigos-chave:
123456784950515253545556
Q W E R T Y U I
8187698284898573
A S D F G H J K
6583687071727475
Z X C V B N M ,
90886786667877188
Acrescentado: não se pode chamar PeekMessage - erro de sistema 127 "procedimento especificado não encontrado". RegisterHotKey retorna 1 (verdadeiro). Tentei procurar o RtlGetLastWin32Error() com NativeAPI depois do PeekMessage, ele nem chega a ele. E para apontar
Deve fechar em uma parada de perda. O Forex abre às 00:00 GMT.
Mas fechará não ao preço stopLoss, mas ao primeiro preço, que pode ser muito mais baixo do que o stopLoss! E a TakeProfit fechará com certeza. Portanto, é melhor não sair com o StopLoss, e ainda melhor não deixar posições para o fim de semana!
Como posso descobrir o endereço da minha função de usuário? Isto é, se minha lista diz
então como posso obter o endereço do meuFunc? Preciso dele para saber como encontrar o endereço do WndProc (descrevo com função personalizada) para passar mais adiante ao parâmetro de classe.
Deve fechar em uma parada de perda. O Forex abre às 00:00 GMT.
Está longe de ser certo, pode muito bem fechar na primeira citação. Você tem que ler os documentos, e as corretoras escrevem o que quiserem.
Como posso descobrir o endereço da minha função de usuário? Isto é, se minha lista diz
então como posso obter o endereço do meuFunc? Preciso dele para saber como encontrar o endereço do WndProc (descrevo com função personalizada) para passar mais adiante ao parâmetro de classe.
Quem diz que ele tem sequer um endereço? é uma função MQL4: ele não é compilado nem no sentido literal da palavra, mas passa pelo intérprete em tempo de execução.
Por que o especialista não modifica as ordens?
Aqui está a função:
Chamado no início desta forma:
Quem disse que ele tem sequer um endereço? É uma função MQL4: não é nem mesmo compilado no sentido literal da palavra, mas passa pelo intérprete em tempo de execução.
É lá que o cão é enterrado. Só lamento por 2 ou 3 semanas de perda de tempo, porque escolhi uma interface de janelas independente para meu robô dentro da MQL4+WinAPI sem nenhuma dll autoescrita. Desculpe não ter percebido antes, desculpe por meu código e desenvolvimentos.
Para resumir. Você não pode criar uma janela sobreposta (ou seja, não uma criança) sem copiar o código em sua dll, porque ao descrever WNDCLASS (ou WNDCLASSEX)
linhas indicadas pela seta ao embalar a estrutura em uma matriz int
o endereço do procedimento de janela, ou seja, o manipulador de mouse e teclado para esta janela, é passado. Um procedimento de janela na MQL4 pode ser implementado como uma função definida pelo usuário, mas é impossível obter seu endereço dentro do intérprete, de modo que não há nada a passar. O máximo que é possível na MQL4 é usar as classes de janelas padrão, mas elas serão usadas somente como janelas para crianças. Para simplificar, uma janela criada pelo indicador não pode ser agarrada com um mouse e colocada sobre a borda do terminal (já que será uma janela infantil), enquanto uma janela sobreposta pode ser colocada sobre a borda do terminal. A janela infantil nas classes de janela padrão já está implementada na mt4gui.dll, se alguém precisar. Mas a janela sobreposta com seu próprio mouse e manipulador de teclado é impossível.
Peço aos moderadores que coloquem este diálogo e todas as mensagens relacionadas a um tópico separado como "como criar uma janela na MQL4", para que outros não cometam os mesmos erros e possam encontrá-la em um mecanismo de busca.
Bom dia!
O corretor lê o endereço ip do computador do comerciante somente no modo on-line ou é tecnicamente possível carregar o histórico de alguma pasta no MT4?
Decidi implementar "hotkeys" (sem usar as teclas de controle como Ctrl, Alt, Shift). Mas o código não funciona.
Por que não funcionaria? Em teoria, o sorriso é suposto mudar. Eu defini 81 (código chave Q), mas você pode definir qualquer coisa lá. Aqui estão os códigos-chave:
Acrescentado: não se pode chamar PeekMessage - erro de sistema 127 "procedimento especificado não encontrado". RegisterHotKey retorna 1 (verdadeiro). Tentei procurar o RtlGetLastWin32Error() com NativeAPI depois do PeekMessage, ele nem chega a ele. E para apontar
- o erro de compilação aparecerá.