Roger : Dosyayı satır satır okuyun ve her seferinde değişkenlerinize değerler atayın. Dosya sona erdiğinde, değişkenler son değerlerine sahip olacaktır.
Ve tekrar iyi geceler! Çok uzun zaman önce, bir para biriminde olmak, diğerlerinde siparişleri açan ve takip uygulamasında bir sorunla karşılaşan çok para birimli bir Uzman Danışman yazmaya başladım.
En yakındaki trolü uzmandan söküp akıllanmaya başladım ama hiçbir şey olmuyor. İşte kod:
// ну так сообственно вызываю функцию - TrailingStop();//вот что в функцииvoid TrailingStop()
{
if (TrailingStop<MinStop) return ;
int ask, bid, open, stop, level;
for ( int i= 0 ; i< OrdersTotal (); i++)
{
if (! OrderSelect (i,SELECT_BY_POS,MODE_TRADES)) break ;
if (OrderSymbol()!= Symbol ()) continue ;
if (OrderType()==OP_BUY)
{
bid= MathRound (Bid/ Point );
open= MathRound (OrderOpenPrice()/ Point );
stop= MathRound (OrderStopLoss()/ Point );
level=bid-TrailingStop;
if (level<open || level>bid-MinStop) continue ;
if (stop> 0 && stop>=level) continue ;
OrderModify(OrderTicket(),OrderOpenPrice(),level* Point ,OrderTakeProfit(), 0 , White );
Print ( "трал сдвинут" );
//ShowError();
}
if (OrderType()==OP_SELL)
{
ask= MathRound (Ask/ Point );
open= MathRound (OrderOpenPrice()/ Point );
stop= MathRound (OrderStopLoss()/ Point );
level=ask+TrailingStop;
if (level>open || level<ask+MinStop) continue ;
if (stop> 0 && stop<=level) continue ;
OrderModify(OrderTicket(),OrderOpenPrice(),level* Point ,OrderTakeProfit(), 0 , White );
//ShowError(); Print ( "трал сдвинут" );
}
}
}
ve işte çözemediğim şey. Danışman bir karikatür olduğu için, para birimleri için öngörülemeyen bir şekilde emirler açar ve aynı anda birkaç para biriminde olur.
Takip eden kodda, ( int i= 0 ; i< OrdersTotal (); i++) için açık siparişler sayılır ve ardından OrderSelect siparişiseçilir, vb., belirli bir çift için her açık sipariş için değişikliklerin alınması gerektiğini anlıyorum. teklif ver, verileri iyi sor, vb. pürüz burada, ancak işlev hangi para biriminden hangi verileri indireceğini ve değişiklik sırasını nasıl seçeceğini nasıl bulabilir? Kafamda tek bir seçenek var, en kötüsü her para birimi için bir sonda yazmak) . bana ne yapılabileceğini söyle. Anladığım kadarıyla, bu sadece takip için geçerli değil, aynı zamanda bir siparişi kapatma işlevine de eşdeğer.
Ve tekrar iyi geceler! Çok uzun zaman önce, bir para biriminde olmak, diğerlerinde siparişleri açan ve takip uygulamasında bir sorunla karşılaşan çok para birimli bir danışman yazmaya başladım.
En yakındaki trolü uzmandan söküp akıllanmaya başladım ama hiçbir şey olmuyor. İşte kod:
ve işte çözemediğim şey. Danışman bir karikatür olduğu için, para birimleri için öngörülemeyen bir şekilde emirler açar ve aynı anda birkaç para biriminde olur.
Takip eden kodda, ( int i= 0 ; i< OrdersTotal (); i++) için açık siparişler sayılır ve ardından OrderSelect siparişi seçilir, vb., belirli bir çift için her açık sipariş için değişikliklerin alınması gerektiğini anlıyorum. teklif ver, verileri iyi sor, vb. pürüz burada, ancak işlev hangi para biriminden hangi verileri indireceğini ve değişiklik sırasını nasıl seçeceğini nasıl bulabilir? Kafamda tek bir seçenek var, en kötüsü her para birimi için bir sonda yazmak) . bana ne yapılabileceğini söyle. Anladığım kadarıyla, bu sadece takip etmekle ilgili değil, aynı zamanda bir siparişi kapatma işleviyle de eşdeğer.
Alet sembolünü trol koduna geçirmeyi deneyin. Sonra her çift için bir trol çağıracaksınız.
void TrailingStop( string sy)
if (sy == "" || sy == "0" ) sy = Symbol();
Peki, sy değerine dayanarak, belirli bir sembolün verilerini diğer değerlere atayın ... Aynı Ask ile Teklif, örneğin ...
İşleve iletilen çiftin verilerine göre sondaki koddaki değişkenlere değerler atayın. Sondaki kodu bitirmeniz gerekiyor... Örneğin, Bid değişkeni sadece bildirilmemeli,
ve kendisine atanan bir değerle ilan edildi:
int ask = MarketInfo(sy, MODE_ASK), bid=MarketInfo(sy, MODE_BID), open, stop, level;
Sırasıyla
bid= MathRound (Bid/ Point );
farklı şekilde yazılmalıdır, örneğin:
bid= MathRound (MarketInfo(sy, MODE_BID)/ Point );
Veya başka bir değişken oluşturun, örneğin PriceBid ve yazın
PriceBid= MathRound (Bid/ Point );
ve daha sonra kodda Bid yerine PriceBid kullanın...
Tüm kodunuzu gözden geçirin ve gerektiğinde belirli bir sembol için değişken alıcıları kullanın. Ve çağrıldığında bu sembolü trol işlevine ileteceksiniz:
artmedia70 : İşleve iletilen çiftin verilerine göre sondaki koddaki değişkenlere değerler atayın. Sondaki kodu bitirmeniz gerekiyor... Örneğin, Bid değişkeni sadece bildirilmemeli,
ve kendisine atanan bir değerle ilan edildi:
Sırasıyla
farklı şekilde yazılmalıdır, örneğin:
Veya başka bir değişken oluşturun, örneğin PriceBid ve yazın
ve daha sonra kodda Bid yerine PriceBid'i kullanın...
Tüm kodunuzu gözden geçirin ve gerektiğinde belirli bir sembol için değişken alıcıları kullanın. Ve çağrıldığında bu karakteri trol işlevine geçireceksiniz:
veya
Bu daha net mi?
çok anlaşılır. Hangi döviz çiftinin bana hangi anda transfer edileceğini bulamıyorum. Örneğin, böyle ve böyle çiftler için 4 siparişin açık olduğu ve bu çiftlerin tam olarak ne iletilmesi gerektiği hakkında nereden bilgi alabilirim.
Doğru şeyi yapıp yapmadığımı bilmiyorum, .. genel olarak ....
в блоке start определяю открытые ордера и определяю по каким парам они открыты
for ( int i= 0 ; i< OrdersTotal (); i++)
{
if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)) break ;
if (OrderSymbol()== "EURUSD" ) {sy= "EURUSD" ;MinStop=MarketInfo(sy,MODE_STOPLEVEL); break; }
if (OrderSymbol()== "GBPUSD" ) {sy= "GBPUSD" ;MinStop=MarketInfo(sy,MODE_STOPLEVEL); break; }
}
TrailingStop(sy);
а в функции делаю следующее
void TrailingStop( string sy)
{
if (TrailingStop<MinStop) return ;
int ask, bid, open, stop, level,point;
for ( int i= 0 ; i< OrdersTotal (); i++)
{
if (! OrderSelect (i,SELECT_BY_POS,MODE_TRADES)) break ;
if (OrderSymbol()==sy)
bid=MarketInfo(sy,MODE_BID);
ask=MarketInfo(sy,MODE_ASK);
point=MarketInfo(sy,MODE_POINT);
if (OrderType()==OP_BUY)
{
bid= MathRound (bid/point);
open= MathRound (OrderOpenPrice()/point);
stop= MathRound (OrderStopLoss()/point);
level=bid-TrailingStop;
if (level<open || level>bid-MinStop) continue ;
if (stop> 0 && stop>=level) continue ;
OrderModify(OrderTicket(),OrderOpenPrice(),level*point,OrderTakeProfit(), 0 , White );
Print ( "трал сдвинут" );
//ShowError();
}
if (OrderType()==OP_SELL)
{
ask= MathRound (ask/point);
open= MathRound (OrderOpenPrice()/point);
stop= MathRound (OrderStopLoss()/point);
level=ask+TrailingStop;
if (level>open || level<ask+MinStop) continue ;
if (stop> 0 && stop<=level) continue ;
OrderModify(OrderTicket(),OrderOpenPrice(),level*point,OrderTakeProfit(), 0 , White );
//ShowError(); Print ( "трал сдвинут" );
}
}
}
ama bir nedenden dolayı, sonunda EURUSD hatası alıyorum: sıfır bölme - bu hata görünüşe göre 0 değişkeninde bir yerde, muhtemelen bölme gibi bir işlem sırasında diyor. Doğru şekilde uygulamaya çalışıyor muyum?
int tanıtıcı=FileOpen("a1.csv",FILE_READ|FILE_WRITE,';'); FileWrite(tanıtıcı, a1);
FileClose(tutamak); a1=5 dosyasında;
Temel bilgilerde yanlış anlama Lütfen açıklayın - önerileni ekleyin
int tanıtıcı=FileOpen("a1.csv",FILE_READ|FILE_WRITE,';'); burada a1'e 5 değeri atanır
FileClose(tutamak);
gerçekten gerekli
Yani, sırayla.
Yalnızca en son verilere ihtiyaç duyuluyorsa, neden öncekileri kaydedelim? ("yazmadan önce", FILE_READ|FILE_WRITE modlarının bir kombinasyonu ile oluşur). O yüzden kullanmak daha mantıklıFILE_CSV|FILE_WRITE modu, yeni veriler yazılmadan önce önceki kayıtların silindiği mod.
Bir dosyaya 4 değişken yazmaya başlıyoruz.
//+------------------------------------------------------------------+int start(){
int handle;
int a1 = 3 ;
double punkt = 0.4 ;
double nn = 1128 ;
double mm = 1000 ;
handle= FileOpen ( "a1.csv" , FILE_CSV | FILE_WRITE , ';' );
FileWrite (handle,a1,punkt,nn,mm);
FileClose (handle);
}
//+------------------------------------------------------------------+
Hatırlanması gereken en önemli şey, değişkenlerin yazıldığı sıradır, çünkü onları aynı sırayla okuyacağız.
Verileri bir dosyadan değişkenlere okumaya başlıyoruz.
//+------------------------------------------------------------------+int start(){
int handle;
int a;
double p;
double n;
double m;
handle= FileOpen ( "a1.csv" , FILE_CSV | FILE_READ , ';' );
a = FileReadNumber (handle); //считываем первую цифру, соответствующую переменной a1 и далее по порядку...
p = FileReadNumber (handle); //punkt
n = FileReadNumber (handle); //nn
m = FileReadNumber (handle); //mm
FileClose (handle);
}
//+------------------------------------------------------------------+
FileReadNumber() fonksiyonunu kullanarak, yazdığımız sırayla, basamak basamak sırayla okuruz. Aslında, hepsi bu, karmaşık bir şey yok :)
çok anlaşılır. Hangi döviz çiftinin bana hangi anda transfer edileceğini bulamıyorum. Örneğin, böyle ve böyle çiftler için 4 siparişin açık olduğu ve bu çiftlerin tam olarak ne iletilmesi gerektiği hakkında nereden bilgi alabilirim.
Doğru şeyi yapıp yapmadığımı bilmiyorum, .. genel olarak ....
ama bir nedenden dolayı, sonunda EURUSD hatası alıyorum: sıfır bölme - bu hata görünüşe göre 0 değişkeninde bir yerde, muhtemelen bölme gibi bir işlem sırasında diyor. Doğru şekilde uygulamaya çalışıyor muyum?
Değişkenlere her değer atama işleminden sonra veya her bölme işleminden önce sıfırla nerede karşılaştığınızı belirlemek için bir çıktı alın ve bundan dans edin.
Dosyayı satır satır okuyun ve her seferinde değişkenlerinize değerler atayın. Dosya sona erdiğinde, değişkenler son değerlerine sahip olacaktır.
Nasıl uygulanır?
Ne kullanacağını çözemiyorum
Nasıl uygulanır?
Ne kullanacağını çözemiyorum
Bu konuda zaten çok şey yazıldı ve yeniden yazıldı, bunu deneyin https://www.mql5.com/ru/forum/118349
Ve tekrar iyi geceler! Çok uzun zaman önce, bir para biriminde olmak, diğerlerinde siparişleri açan ve takip uygulamasında bir sorunla karşılaşan çok para birimli bir Uzman Danışman yazmaya başladım.
En yakındaki trolü uzmandan söküp akıllanmaya başladım ama hiçbir şey olmuyor. İşte kod:
ve işte çözemediğim şey. Danışman bir karikatür olduğu için, para birimleri için öngörülemeyen bir şekilde emirler açar ve aynı anda birkaç para biriminde olur.
Takip eden kodda, ( int i= 0 ; i< OrdersTotal (); i++) için açık siparişler sayılır ve ardından OrderSelect siparişi seçilir, vb., belirli bir çift için her açık sipariş için değişikliklerin alınması gerektiğini anlıyorum. teklif ver, verileri iyi sor, vb. pürüz burada, ancak işlev hangi para biriminden hangi verileri indireceğini ve değişiklik sırasını nasıl seçeceğini nasıl bulabilir? Kafamda tek bir seçenek var, en kötüsü her para birimi için bir sonda yazmak) . bana ne yapılabileceğini söyle. Anladığım kadarıyla, bu sadece takip için geçerli değil, aynı zamanda bir siparişi kapatma işlevine de eşdeğer.
Ve tekrar iyi geceler! Çok uzun zaman önce, bir para biriminde olmak, diğerlerinde siparişleri açan ve takip uygulamasında bir sorunla karşılaşan çok para birimli bir danışman yazmaya başladım.
En yakındaki trolü uzmandan söküp akıllanmaya başladım ama hiçbir şey olmuyor. İşte kod:
ve işte çözemediğim şey. Danışman bir karikatür olduğu için, para birimleri için öngörülemeyen bir şekilde emirler açar ve aynı anda birkaç para biriminde olur.
Takip eden kodda, ( int i= 0 ; i< OrdersTotal (); i++) için açık siparişler sayılır ve ardından OrderSelect siparişi seçilir, vb., belirli bir çift için her açık sipariş için değişikliklerin alınması gerektiğini anlıyorum. teklif ver, verileri iyi sor, vb. pürüz burada, ancak işlev hangi para biriminden hangi verileri indireceğini ve değişiklik sırasını nasıl seçeceğini nasıl bulabilir? Kafamda tek bir seçenek var, en kötüsü her para birimi için bir sonda yazmak) . bana ne yapılabileceğini söyle. Anladığım kadarıyla, bu sadece takip etmekle ilgili değil, aynı zamanda bir siparişi kapatma işleviyle de eşdeğer.
Infinity :
bir şey teknolojiyi tam olarak anlamadı, nasıl çalışacak
Bu konuda zaten çok şey yazıldı ve yeniden yazıldı, bunu deneyin https://www.mql5.com/en/forum/118349
int a1;
int tanıtıcı=FileOpen("a1.csv",FILE_READ|FILE_WRITE,';');FileWrite(tanıtıcı, a1);
FileClose(tutamak);
a1=5 dosyasında;
Temel bilgilerde yanlış anlama Lütfen açıklayın - önerileni ekleyin
int tanıtıcı=FileOpen("a1.csv",FILE_READ|FILE_WRITE,';');burada a1'e 5 değeri atanır
FileClose(tutamak);
gerçekten gerekli
ve kendisine atanan bir değerle ilan edildi:
int ask = MarketInfo(sy, MODE_ASK), bid=MarketInfo(sy, MODE_BID), open, stop, level;Sırasıyla
farklı şekilde yazılmalıdır, örneğin:
Veya başka bir değişken oluşturun, örneğin PriceBid ve yazın
ve daha sonra kodda Bid yerine PriceBid kullanın...
Tüm kodunuzu gözden geçirin ve gerektiğinde belirli bir sembol için değişken alıcıları kullanın.
Ve çağrıldığında bu sembolü trol işlevine ileteceksiniz:
TrailingStop(""); // Тралим символ графикаveya
Bu daha net mi?
İşleve iletilen çiftin verilerine göre sondaki koddaki değişkenlere değerler atayın. Sondaki kodu bitirmeniz gerekiyor... Örneğin, Bid değişkeni sadece bildirilmemeli,
ve kendisine atanan bir değerle ilan edildi:
Sırasıyla
farklı şekilde yazılmalıdır, örneğin:
Veya başka bir değişken oluşturun, örneğin PriceBid ve yazın
ve daha sonra kodda Bid yerine PriceBid'i kullanın...
Tüm kodunuzu gözden geçirin ve gerektiğinde belirli bir sembol için değişken alıcıları kullanın.
Ve çağrıldığında bu karakteri trol işlevine geçireceksiniz:
veya
Bu daha net mi?
çok anlaşılır. Hangi döviz çiftinin bana hangi anda transfer edileceğini bulamıyorum. Örneğin, böyle ve böyle çiftler için 4 siparişin açık olduğu ve bu çiftlerin tam olarak ne iletilmesi gerektiği hakkında nereden bilgi alabilirim.
Doğru şeyi yapıp yapmadığımı bilmiyorum, .. genel olarak ....
ama bir nedenden dolayı, sonunda EURUSD hatası alıyorum: sıfır bölme - bu hata görünüşe göre 0 değişkeninde bir yerde, muhtemelen bölme gibi bir işlem sırasında diyor. Doğru şekilde uygulamaya çalışıyor muyum?
int a1;
int tanıtıcı=FileOpen("a1.csv",FILE_READ|FILE_WRITE,';');FileWrite(tanıtıcı, a1);
FileClose(tutamak);
a1=5 dosyasında;
Temel bilgilerde yanlış anlama Lütfen açıklayın - önerileni ekleyin
int tanıtıcı=FileOpen("a1.csv",FILE_READ|FILE_WRITE,';');burada a1'e 5 değeri atanır
FileClose(tutamak);
gerçekten gerekli
Yani, sırayla.
Yalnızca en son verilere ihtiyaç duyuluyorsa, neden öncekileri kaydedelim? ("yazmadan önce", FILE_READ|FILE_WRITE modlarının bir kombinasyonu ile oluşur).
O yüzden kullanmak daha mantıklı FILE_CSV|FILE_WRITE modu, yeni veriler yazılmadan önce önceki kayıtların silindiği mod.
Bir dosyaya 4 değişken yazmaya başlıyoruz.
Hatırlanması gereken en önemli şey, değişkenlerin yazıldığı sıradır, çünkü onları aynı sırayla okuyacağız.
Verileri bir dosyadan değişkenlere okumaya başlıyoruz.
FileReadNumber () fonksiyonunu kullanarak, yazdığımız sırayla, basamak basamak sırayla okuruz.
Aslında, hepsi bu, karmaşık bir şey yok :)
çok anlaşılır. Hangi döviz çiftinin bana hangi anda transfer edileceğini bulamıyorum. Örneğin, böyle ve böyle çiftler için 4 siparişin açık olduğu ve bu çiftlerin tam olarak ne iletilmesi gerektiği hakkında nereden bilgi alabilirim.
Doğru şeyi yapıp yapmadığımı bilmiyorum, .. genel olarak ....
ama bir nedenden dolayı, sonunda EURUSD hatası alıyorum: sıfır bölme - bu hata görünüşe göre 0 değişkeninde bir yerde, muhtemelen bölme gibi bir işlem sırasında diyor. Doğru şekilde uygulamaya çalışıyor muyum?