[ARCHIVIO]Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non posso andare da nessuna parte senza di te - 5. - pagina 247

 

sss2019, non c'è tempo per occuparsene ora, mi dispiace.

Zhunko:
Sbagliato. Corretto, come mostrato sopra.

Non appena avrò finito, lo aggiusterò e modificherò il codice nel post lì.

Domanda. Come si ottiene un puntatore a una stringa? La stringa MQL4 è C++ lpsz, per quanto ho capito. Ma come otteniamo l'indirizzo della stringa stessa?

 
Ho un'idea su come far funzionare uno stesso EA con diversi wizard. Il problema è che quando c'è un blocco, il robot gestirà separatamente questa situazione senza interferire con altri ordini. cioè abbiamo una posizione aperta a Bay (magic 001) il mercato ci è andato contro e invece di chiudere l'affare si apre l'affare opposto a Sell con magic 001 e il robot liquiderà questa situazione, ma per evitare di aspettare molto tempo per liquidare la situazione voglio aprire di nuovo Bay ma già con magic (002) e se il trend non ha successo il blocco con la magic (002) aprirà di nuovo Sell con (002), ecc. Potete dire come far funzionare gli affari come segue con diverse coppie magic?
 
pasha5282:
Se ho un'idea su come far funzionare uno stesso EA con diverse procedure guidate, il robot dovrebbe gestire separatamente questa situazione quando si verifica un blocco e non interferire con altri ordini. Cioè abbiamo una posizione aperta a Bay (magia 001) il mercato è andato contro di noi e invece di chiudere l'affare si apre l'affare opposto a Sell con la magia 001 e il robot si prenderà cura della situazione e voglio aprire di nuovo Bay ma con la magia (002) e se il trend non è corretto l'opposto Sell con la magia (002) si aprirà di nuovo e così via. Qualche consiglio su come far funzionare gli affari come un livello con diverse magie o come implementarlo?
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);
           }
}  }  }

Esempio di un contatore di ordini aperti e pendenti secondo il simbolo e il mago richiesti

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++;
}  }  }  }
 

Per qualche motivo, il terminale si è bloccato durante il test. Ora, quando lo si accende, inizia ad usare circa 150 mb di memoria e si blocca. Stavo per reinstallare, ma ho spostato tutti i miei file prima di farlo. Quando ho aperto le cartelle ho scoperto che non tutti i file che avevo creato erano lì. Dove sono gli altri?


 
silhouette:

Per qualche motivo, il terminale si è bloccato durante il test. Ora, quando lo si accende, inizia a usare circa 150 mb di memoria e si blocca. Stavo per reinstallare, ma ho spostato tutti i miei file prima di farlo. Quando ho aperto le cartelle ho scoperto che non tutti i file che avevo creato erano lì. Dove sono gli altri?

La schermata di sinistra è MQL5 e non 4.
 
gyfto:

sss2019, non c'è tempo per occuparsene ora, mi dispiace.


Non appena avrò finito, lo aggiusterò e modificherò il codice nel post lì.

Domanda. Come si ottiene un puntatore a una stringa? La stringa MQL4 è C++ lpsz, per quanto ho capito. Ma come faccio a ottenere l'indirizzo della stringa stessa?

Non c'è modo di farlo in MQL4. Potete passare la stringa alla DLL e restituire l'indirizzo come INT.
 
paladin80:
La schermata di sinistra è MQL5, non 4.

No, è il quarto. È solo che quando si clicca sul quarto file, si apre attraverso il quinto, per qualche motivo
 
silhouette:
No, il quarto. È solo che i file del quarto, quando vengono cliccati, si aprono attraverso il quinto, per qualche motivo

Aprire MetaEditor per 5, nella finestra di sinistra "Navigator" -> su una cartella clic destro del mouse -> "Open folder" e lì tra le cartelle provare a cercare.



 
Zhunko:
Non c'è modo di farlo in MQL4. Potete passare una stringa a una DLL e restituire l'indirizzo come 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);
}

Affinché altri non soffrano allo stesso modo, ho allegato l' intero progetto zippato. Con fonti, in modo che altri possano vedere che non è un virus. Non ho avuto il tempo di controllare cosa è compilato da VC++ 6.0 e cosa è spazzatura. StrAddress.dll è nella cartella Debug.

File:
straddress.zip  984 kb
 
paladin80:

Aprire MetaEditor per 5, nella finestra di sinistra "Navigator" -> clic destro del mouse su una cartella -> "Open folder" e lì tra le cartelle provare a cercare.



Grazie, ma non è venuto fuori niente da mt4. Ha usato la ricerca e ha trovato tutti i file al seguente indirizzo:

C:\Users\Qwer\AppData\Local\VirtualStore\Program Files\MetaTrader 4\experts\include

Non ho idea di come ci siano arrivati, ad essere onesti, dato che sono stati salvati correttamente prima.

Motivazione: