[ARŞİV] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 5. - sayfa 247

 

sss2019 , şimdi anlamak için zaman yok, üzgünüm.

Zhunko :
Doğru değil. Doğru, yukarıda gösterildiği gibi.

Elime geçer geçmez düzelteceğim ve oradaki mesajdaki kodu düzenleyeceğim.

Soru. Bir dizeye bir işaretçi nasıl alınır? string MQL4, anladığım kadarıyla lpsz C++. Ama dizenin kendisinin adresi nasıl alınır?

 
Aynı danışmanın farklı büyülerle nasıl çalıştırılacağı konusunda fikri olan kim söyle bana. Görev, bir kilit göründüğünde, robotun bu durumu, siparişlerin geri kalanına müdahale etmeden ayrı ayrı çözmesidir. yani, Bay'de açık 1 pozisyonumuz var (sihir 001), piyasa yolumuzdan çıktı ve anlaşmayı kapatmak yerine, Magic 001 ile Sat'ta ters bir anlaşma açıldı, o zaman robot bu durumu çözecek, ancak sırayla durum düzelene kadar uzun süre beklemek değil, Bay'i tekrar açmak istiyorum ama büyüyle (002) ve trendin başarısız olması durumunda, büyü ile Satış kilidi (002) tekrar açılacak vb. farklı sihirlerle katmanlar halinde anlaşmaları nasıl yapacağımı söyle, tabiri caizse? biri gelebilir mi? veya nasıl uygulanır?
 
pasha5282 :
Aynı danışmanın farklı büyülerle nasıl çalıştırılacağı konusunda fikri olan kim söyle bana. Görev, bir kilit göründüğünde, robotun bu durumu, siparişlerin geri kalanına müdahale etmeden ayrı ayrı çözmesidir. yani, Bay'de açık 1 pozisyonumuz var (sihir 001), piyasa bize gitmedi ve anlaşmayı kapatmak yerine, büyü 001 ile Sat'ta ters anlaşma açılıyor, o zaman robot bu durumu çözecek, ancak beklememek için durum düzelene kadar uzun bir süre, tekrar yapmak istiyorum Bay'i aç ama büyü ile (002) ve trendde başarısız olması durumunda, büyü ile Satış kilidi (002) tekrar açılacak, vb. farklı sihirlerle katmanlar halinde anlaşmaları nasıl yapacağımı söyle, tabiri caizse? biri gelebilir mi veya nasıl uygulanır?
 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 );
           }
}  }  }

İstenen sembol ve sihir için açık ve bekleyen emirlerin bir sayacı örneği

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

Bazı nedenlerden dolayı, test sırasında terminal kapandı. Şimdi açtığınızda yaklaşık 150 MB bellek kullanmaya başlıyor ve donuyor. Yeniden yükleyecektim ama ondan önce tüm dosyalarımı aktardım. Klasörleri açtığımda, oluşturduğum tüm dosyaların orada olmadığını gördüm. Geri kalanlar nerede?


 
silhouette :

Bazı nedenlerden dolayı, test sırasında terminal kapandı. Şimdi açtığınızda yaklaşık 150 MB bellek kullanmaya başlıyor ve donuyor. Yeniden yükleyecektim ama ondan önce tüm dosyalarımı aktardım. Klasörleri açtığımda, oluşturduğum tüm dosyaların orada olmadığını gördüm. Geri kalanlar nerede?

Soldaki ekran MQL5 ve 4 değil.
 
gyfto :

sss2019 , şimdi anlamak için zaman yok, üzgünüm.


Elime geçer geçmez düzelteceğim ve oradaki mesajdaki kodu düzenleyeceğim.

Soru. Bir dizeye bir işaretçi nasıl alınır? string MQL4, anladığım kadarıyla lpsz C++. Ama dizenin kendisinin adresi nasıl alınır?

MQL4'te değil. Bir dizeyi DLL'ye iletebilir ve adresi oradan INT olarak döndürebilirsiniz.
 
paladin80 :
Soldaki ekran MQL5 ve 4 değil.

Hayır, dördüncü. Sadece dördüncünün dosyaları tıklandığında beşinciden açılıyor, bir nedenden dolayı
 
silhouette :
Hayır, dördüncü. Sadece dördüncünün dosyaları tıklandığında beşinciden açılıyor, bir nedenden dolayı

5 için MetaEditor'u açın, sol pencerede "Gezgin" -> klasöre sağ tıklayın -> "Klasörü Aç" ve oradaki klasörler arasında arama yapmayı deneyin.



 
Zhunko :
MQL4'te değil. Bir dizeyi DLL'ye iletebilir ve adresi oradan INT olarak döndürebilirsiniz.

//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);
}

Başkaları da aynı acıyı çekmesin diye tamamen sıkıştırılmış bir proje ekledim. Bunun bir virüs olmadığını görmek için kaynak kodları ile. Davada orada hangi VC ++ 6.0'ın derlendiğini ve orada neyin çöp olduğunu anlamaya zaman yoktu. Hata Ayıklama klasöründeki StrAddress.dll.

Dosyalar:
straddress.zip  984 kb
 
paladin80 :

5 için MetaEditor'u açın, sol pencerede "Gezgin" -> klasöre sağ tıklayın -> "Klasörü Aç" ve oradaki klasörler arasında arama yapmayı deneyin.



Teşekkürler, ama orada mt4'ten hiçbir şey yoktu. Aramayı kullandım ve tüm dosyaları aşağıdaki adreste buldum:

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

Dürüst olmak gerekirse, oraya nasıl geldikleri hakkında hiçbir fikrim yok, çünkü önceden beklendiği gibi korunmuşlardı.

Neden: