MQL5'te OOP hakkında sorular - sayfa 61

 
Alexey Navoykov :
Öte yandan, serileştirme için metin alanı adlarını açıkça ayarlamak muhtemelen daha iyidir. Böylece daha sonra kaydedilen dosyaların çalışmayı durduracağından korkmadan bunları kodda özgürce yeniden adlandırabilirsiniz.

bu yüzden baypasın yapısını soruyorum, uygulamanın kendisi onuncu şey)))

alan adlarını rafine etmek genel olarak bir sorun değildir, sorun daha sonra ne yapılacağını düşünmektir - json sadece her sınıfta bir yöntem veya statik bir sınıf olacaktır, hatta sınıf alanlarının bir kopyasını oluşturacaktır. metin....

;)


not:

Bazı köklü bravadoları düşündüm - "evet, bir kodum var, genel olarak, MQL'den C ++'da burada ve orada değişiklik yapılmadan taşınır !!!"

konu elbette gerekli ama böyle bir kod yapısını geliştirmek için harcanan zaman nedeniyle bu iş oldukça pahalı ama yeni Wishlist ile kod desteği gerekecek

sadece C++ paketinin (+++ MQL) avantajları net değil, sözdizimsel yapılar %90 bire bir, neden yineleniyor? IMHO, bir proje yazarken IDE'de kontrol etmek için genişletilmiş sözdizimi ve derleyici özelliklerine sahip diğer diller ilginçtir - bu, C gibi kamuya açık alandaki hazır gelişmelerden bahsetmemek için en azından hızlı ve rahattır. # ve Python

 
Igor Makanu :

sadece C++ paketinin (+++ MQL ) avantajları net değil

C++ çok daha fazla seçeneğe sahiptir. Artı bir milyar farklı kitaplık.

 
Koldun Zloy :

C++ çok daha fazla seçeneğe sahiptir. Artı bir milyar farklı kitaplık.

şüphesiz

ama ne kadar uğraşırsanız uğraşın, MQL'de herhangi bir Sish başlık dosyasını açamayacak ve bir milyon kitaplığı bağlamak için C++'dan hazır bir çözüm kullanamayacaksınız.

Özellikle yılın başında googledim ve TensorFlow'u MQL'ye bir C++ API ile bağlamaya çalıştım - bir sarmalayıcı yazmanız gerekiyor

 
Igor Makanu :

şüphesiz

ama ne kadar uğraşırsanız uğraşın, MQL'de herhangi bir Sish başlık dosyasını açamayacak ve bir milyon kitaplığı bağlamak için C++'dan hazır bir çözüm kullanamayacaksınız.

Özellikle yılın başında googledim ve TensorFlow'u MQL'ye bir C++ API ile bağlamaya çalıştım - bir sarmalayıcı yazmanız gerekiyor

C++ ve MQL arasındaki bağlantıyı sordunuz. DLL'de C++ kullanıldığını anladım. Başka nasıl?

 
Koldun Zloy :

C++ ve MQL arasındaki bağlantıyı sordunuz. DLL'de C++ kullanıldığını anladım. Başka nasıl?

https://www.mql5.com/en/forum/307970/page10#comment_11652222 sordum

aksi takdirde, iyi .... c_api.h (ekli) başlık dosyasını MQL'de açmanıza ve ardından TensorFlow'dan dock'ları kullanmanıza izin veren bir numara

şimdi bu başlık dosyasını VS'de açarsınız, ardından çağrıları, modeli, dahili durumları... ve .dll'nizi sararsınız ve ardından onu MQL'de zaten kullanabilirsiniz.


genel olarak, tüm bunlar zaman alıcıdır


Igor Makanu :

bu yüzden baypasın yapısını soruyorum, uygulamanın kendisi onuncu şey)))

MQL https://habr.com/en/post/311262/ kullanarak basit yapıları json'a seri hale getirmek muhtemelen gerçekçidir.

en azından ağda hazır malzeme olduğunu teşvik etmek

Dosyalar:
c_api.zip  17 kb
 
Igor Makanu :

uh-huh... Bunu bir kez daha sormaya çalışacağım:

örnek almak için yardım edin! lütfen!

Tamamen öyle düşünmek için diz üzerine yazılmıştır

 #define COMMA (text== NULL ? NULL : ",\n" )
#define PUSH(dVal) Push( #dVal,dVal)

class CJSon{
   string text;
public :
   CJSon():text( NULL ){}
   CJSon* Push( string key, string value) {text+=COMMA+ "\"" +key+ "\":\"" +value+ "\"" ; return & this ;}
   CJSon* Push( string key, long value)   {text+=COMMA+ "\"" +key+ "\":" +( string )value; return & this ;}
   CJSon* Push( string key, double value) {text+=COMMA+ "\"" +key+ "\":" +( string )value; return & this ;}
   string Finish()   { return text= "{\n" +text+ "\n}" ;}
};

#undef COMMA

void OnStart (){
   int a= 56 ;
   double b= 0.369 ;
   string text= "Example" ;
   string json=(CJSon()).PUSH(a).PUSH(b).PUSH(text).Finish();
   Print (json);
 } 
 
Vladimir Simakov :

Diz üzerine yazılmıştır, tamamen öyle, düşünmek için

teşekkürler ama olmadı :(

 //+------------------------------------------------------------------+
static string _json;
template < typename T> class CJSon{
#define COMMA (_json== NULL ? NULL : ",\n" )
#define PUSH(dVal) Push( #dVal,dVal)
public :
   CJSon() {_json = "" ;}
   CJSon* Push( string key, string value) {_json+=COMMA+ "\"" +key+ "\":\"" +value+ "\"" ; return & this ;}
   CJSon* Push( string key, long value)   {_json+=COMMA+ "\"" +key+ "\":" +( string )value; return & this ;}
   CJSon* Push( string key, double value) {_json+=COMMA+ "\"" +key+ "\":" +( string )value; return & this ;}
   static string Finish()   { return _json= "{\n" +_json+ "\n}" ;}
};
//+------------------------------------------------------------------+
class A
{
   public :
   static long a1;
};
long A::a1;
//+------------------------------------------------------------------+
void OnStart ()
{
   CJSon<A> a;
   A::a1 = 10 ;
   
   a.PUSH(A::a1);
   string s = a.Finish() ;
   
   PRINT(s);
}
//+------------------------------------------------------------------+

2020.05.20 23:51:43.932 tst____ (EURUSD,H1) s = {

2020.05.20 23:51:43.932 tst____ (EURUSD,H1) ,

2020.05.20 23:51:43.932 tst____ (EURUSD,H1) "A::a1":10

2020.05.20 23:51:43.932 tst____ (EURUSD,H1) }

buna ek olarak, hala sadece statik olarak çalışmak istiyor

Tanımlar ile tek bir metodda string toplamak o kadar zor olmasa da genel olarak düşünmek gerekir.

 
Igor Makanu :

https://www.mql5.com/en/forum/307970/page10#comment_11652222 sordum

aksi takdirde, iyi .... c_api.h (ekli) başlık dosyasını MQL'de açmanıza ve ardından TensorFlow'dan dock'ları kullanmanıza izin veren bir numara

şimdi bu başlık dosyasını VS'de açarsınız, ardından çağrıları, modeli, dahili durumları... ve .dll'nizi sararsınız ve ardından onu MQL'de zaten kullanabilirsiniz.


genel olarak, tüm bunlar zaman alıcıdır

C++ kaynağının MQL derleyicisi ile derlenmesine izin veren hiçbir hile yoktur.

TensorFlow kitaplığı birçok işlevi dışa aktarır. Büyük olasılıkla sadece küçük bir kısmına ihtiyacınız var.

Kullandığınız fonksiyon prototiplerini yazın. Çok zaman almaz.


 
Vladimir Simakov :

Diz üzerine yazılmıştır, tamamen öyle, düşünmek için

Sonunda çok ilginç bir şey. Bu "Buharlı Tren" modeli mi?

 
Igor Makanu :

teşekkürler ama olmadı :(

2020.05.20 23:51:43.932 tst____ (EURUSD,H1) s = {

2020.05.20 23:51:43.932 tst____ (EURUSD,H1) ,

2020.05.20 23:51:43.932 tst____ (EURUSD,H1) "A::a1":10

2020.05.20 23:51:43.932 tst____ (EURUSD,H1) }

buna ek olarak, hala sadece statik olarak çalışmak istiyor

Tanımlar ile tek bir metodda string toplamak o kadar zor olmasa da genel olarak düşünmek gerekir.

Bir şekilde yapmıyorsun.)

 #define COMMA (text== NULL ? "{\n" : ",\n" )
#define VALUE(dVal) Push( #dVal,dVal)
#define STRUCT(dVal) PushStruct( #dVal,dVal.JSon())

class CJSon{
   string text;
public :
   CJSon():text( NULL ){}
   CJSon* Push( string key, string value) {text+=COMMA+ "\"" +key+ "\":\"" +value+ "\"" ; return & this ;}
   CJSon* PushStruct( string key, string value) {text+=COMMA+ "\"" +key+ "\":" +value; return & this ;}
   CJSon* Push( string key, long value)   {text+=COMMA+ "\"" +key+ "\":" +( string )value; return & this ;}
   CJSon* Push( string key, double value) {text+=COMMA+ "\"" +key+ "\":" +( string )value; return & this ;}
   string Finish()   { return text+= "\n}" ;}
};

#undef COMMA

class _CTest{
   int a;
   double b;
   string t;
public :
   _CTest( int _a, double _b, string _t):a(_a),b(_b),t(_t){}
   string JSon()  { return (CJSon()).VALUE(a).VALUE(b).VALUE(t).Finish();}
};

class CTest{
   _CTest test;
   int a;
   long b;
public :
   CTest():test( 10 , 0.369 , "Hi" ),a( 555 ),b( LONG_MIN ){}
   string JSon() { return (CJSon()).STRUCT(test).VALUE(a).VALUE(b).Finish();}
};

void OnStart (){
   CTest test;
   Print (test.JSon());
 } 
Not Düzeltildi