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

 

sss2019, não há tempo para lidar com isso agora, desculpe.

Zhunko:
Errado. Correto, como mostrado acima.

Assim que eu chegar lá, eu vou consertar e editar o código no correio.

Pergunta. Como faço para obter um ponteiro para um fio? A cadeia MQL4 é C++ lpsz, tanto quanto eu entendi. Mas como obter o endereço do fio em si?

 
Tenho uma idéia de como fazer uma e a mesma EA trabalhar com feiticeiros diferentes. O problema é que quando há uma fechadura, o robô lidará separadamente com esta situação sem interferir com outras ordens. ou seja, temos uma posição aberta na Bay (mágica 001) o mercado foi contra nós e em vez de fechar o negócio, o negócio oposto se abre na Sell com a mágica 001 e o robô estará liquidando esta situação, mas para evitar esperar muito tempo para liquidar a situação quero abrir novamente a Bay mas já com a mágica (002) e se a tendência não for bem sucedida a fechadura com a mágica (002) se abrirá novamente Sell com (002), etc. Você pode dizer como fazer os negócios funcionarem da seguinte forma com diferentes pares mágicos?
 
pasha5282:
Se eu tiver uma idéia de como fazer uma e a mesma EA trabalhar com feiticeiros diferentes, o robô deve lidar separadamente com esta situação quando ocorrer uma fechadura e não interferir com outras ordens. ou seja, temos uma posição aberta na Bay (mágica 001) o mercado foi contra nós e em vez de fechar o negócio, o negócio oposto se abre na Sell com a mágica 001 e o robô cuidará da situação e eu quero abrir novamente a Bay mas com a mágica (002) e se a tendência não for corrigida o oposto Sell com a mágica (002) se abrirá novamente e assim por diante. Algum conselho de como fazer negócios funcionar como uma camada com mágica diferente? Ou como implementá-la?
int MagicNumber=001;
//---
if (OrdersTotal()>0) // проверяем, есть ли ордера
{  for (int i=OrdersTotal()-1; i>=0; i--) // перебор ордеров
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) // выбирается ордер среди открытых и отложенных ордеров
      {  if (OrderSymbol()!=Symbol()) continue; // проверяем - ордер по текущему символу?
         if (OrderMagicNumber()!=MagicNumber) continue; // проверяем - ордер с нужным магиком?
         //---
         if (OrderType()==OP_BUY) // если это открытая позиция на покупку, то ...
           {  // ... какие-то действия
                 return(0);
           }
         //---
         else
         if (OrderType()==OP_SELL) // если это открытая позиция на продажу, то ...
           {  // ... какие-то действия
                 return(0);
           }
}  }  }

Exemplo de um contador de ordens abertas e pendentes pelo símbolo e mágico requerido

string _Symbol="AUDUSD";
int MagicNumber=555;
//---
int Opened_pos=0;
if (OrdersTotal()>0)
{  for (i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {  if (OrderSymbol()==_Symbol)
         {  if (OrderMagicNumber()==MagicNumber)
            Opened_pos++;
}  }  }  }
 

Por alguma razão, o terminal apresentou uma falha durante os testes. Agora, quando se liga, começa a usar cerca de 150 mb de memória e fica pendurado. Ia reinstalar, mas movi todos os meus arquivos antes de fazê-lo. Quando abri as pastas, descobri que nem todos os arquivos que criei estavam lá. Onde estão os demais?


 
silhouette:

Por alguma razão, o terminal apresentou uma falha durante os testes. Agora, quando se liga, começa a usar cerca de 150 mb de memória e fica pendurado. Ia reinstalar, mas movi todos os meus arquivos antes de fazê-lo. Quando abri as pastas, descobri que nem todos os arquivos que criei estavam lá. Onde estão os outros?

A imagem da tela à esquerda é MQL5 e não 4.
 
gyfto:

sss2019, não há tempo para lidar com isso agora, desculpe.


Assim que eu chegar lá, eu vou consertar e editar o código no correio.

Pergunta. Como faço para obter um ponteiro para uma corda? A cadeia MQL4 é C++ lpsz, tanto quanto eu entendi. Mas como posso obter o endereço do próprio fio?

Não há como fazer isso na MQL4. Você pode passar o fio para a DLL e retornar o endereço como INT.
 
paladin80:
A imagem da tela esquerda é MQL5, não 4.

Não, é a quarta. É só que quando você clica no quarto arquivo, ele se abre através do quinto, por alguma razão
 
silhouette:
Não, o quarto. É só que os arquivos do quarto, quando clicados, abrem até o quinto, por alguma razão

Abra o MetaEditor para 5, na janela esquerda "Navegador" -> em uma pasta clique com o botão direito do mouse -> "Abrir pasta" e lá entre as pastas tente pesquisar.



 
Zhunko:
Não há como fazer isso na MQL4. Você pode passar uma string para uma DLL e retornar o endereço como INT.

//C++
#include "stdafx.h"
#include <windows.h>
#define MT4_EXPFUNC __declspec(dllexport)
struct MqlStr {
   int               len;
   char             *string;
  };
BOOL APIENTRY DllMain( HANDLE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)
{
    return TRUE;
}
MT4_EXPFUNC int __stdcall GetStrAddress(const char *str) {    
    MqlStr* s = (MqlStr*)str;
    return (int)s->string; 
}

//MQL4

#import "StrAddress.dll"
int GetStrAddress(string str);//на входе имя инициализированной строки, на выходе её адрес
#import
//объявляем:
string s="something";
int address;
//пример использования:
int start(){
   address=GetStrAddress(s);
   Print(" адрес s равен " s);
}

Para que outros não sofram da mesma forma, eu anexei todo o projeto zipado. Com fontes, para que outros pudessem ver que não se trata de um vírus. Não tive tempo de verificar o que é compilado no VC++ 6.0 e o que é lixo. StrAddress.dll está na pasta Debug.

Arquivos anexados:
straddress.zip  984 kb
 
paladin80:

Abra o MetaEditor para 5, na janela esquerda "Navegador" -> botão direito do mouse sobre uma pasta -> "Abrir pasta" e lá entre as pastas tente pesquisar.



Obrigado, mas nada do mt4 apareceu por lá. Usamos a busca e encontramos todos os arquivos no seguinte endereço:

C:Utentes\\Qwer\AppData\Local\VirtualStore\Arquivos de programa\MetaTrader 4\experts\incluir

Não tenho idéia de como eles chegaram lá, para ser honesto, pois já foram salvos adequadamente antes.