Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
açıklamak o kadar kolay değil
Çevrimdışı grafiğe (göstergenizden) yeni bir onay işaretinin oluşturulduğunu ve gerekli rutinleri yürütmesi gerektiğini "söyleyecek" bir olay göndermeniz gerekir. Düşük seviyeli fonksiyonları kullanmak anlamına gelir. Her şey şöyle görünebilir:
#import "user32.dll"
int GetParent(int hWnd);
#import
#define CHART_CMD_UPDATE_DATA 33324
void UpdateChartWindows()
{
int filePeriod = 1; // file period
string fileSymbol = "your offline symbol name";
string chartName = "your offline symbol chart full name";
string stringForName = " ";
//
//
//
//
//
int windowHandle = WindowHandle(fileSymbol,filePeriod);
if (windowHandle != 0)
{
windowHandle = GetParent(windowHandle);
windowHandle = GetWindow(windowHandle,GW_HWNDFIRST);
while (windowHandle != 0)
{
int len = GetWindowTextA(windowHandle,stringForName,80);
if (len > 0 && StringSubstr(stringForName,0,len) == chartName)
PostMessageA(windowHandle,WM_COMMAND,CHART_CMD_UPDATE_DATA,0);
windowHandle = GetWindow(windowHandle,GW_HWNDNEXT);
}
}
}
Teşekkür ederim kontrol edeceğim. Ancak sendorder sorununu doğru buluyorum. Göstergem, standart olmayan çevrimdışı grafik için bir ad oluşturuyor ve platformlar bu nedenle açmıyor.
ilgisizliğiniz için teşekkür ederim
Tamam, çevrimdışı grafiğin sorunu çalışıyor.
Başka bir problemim var.
Hacimleri belirli kurallarla hesaplayan bir gösterge oluşturmam gerekiyor.
İhtiyacım olan şey, her tik varyasyonu olduğunda göstergenin salınımın uzunluğunu sayması gerektiğidir.
Misal.
Açık candel'de değer arabelleği 0'dır. Bu nedenle, bir geri çekilmeden önce yapılan tüm onayları saymalıdır, ancak döndürülen nihai değer, mum kapandığından beri en yüksek değerdir.
Daha sonra, tampondan döndürülen en yüksek aralıktan yapılan movemenet ile ilgili histogramın rengini ayarlamalıdır.
Farklı bir şekilde deniyorum ama başarılı olamıyorum.
Heeeeeelp^^.
Teşekkür ederim
Tüm desteğiniz için teşekkür ederim. Daha fazlasını öğreniyorum ve tüm yardımlarınızla tüm isteklerimi düzeltiyorum... AMA.
Bir tane daha var ^^.
Hatırlamak için bir void işlevine ihtiyacım var ve bu iki kodun birleşimi olmalı.
İlk, son openorder'ı bulur. ve ikincisi, açık fiyatı daha yüksek olan açık siparişin numarasını bulur.
Doğrudan en yüksek openorderprice'a sahip siparişin numarasına sahip olmak için bir işlev yapmam gerekiyor.
Teşekkür ederim
OrderSelect(i, SELECT_BY_POS);
if(OrderSymbol() == Symbol() && OrderType() == TYPE ) {
if(TYPE == OP_BUY) {
double OPrice = OrderOpenPrice();[/PHP]
[PHP]for(int e=0;e<OrdersTotal();e++) {
if(OrderSelect(e,SELECT_BY_POS,MODE_TRADES)==false ) break;
if(OrderSymbol() == Symbol() && OrderType() == TYPE) {
if(TYPE == OP_BUY) {
if(OrderOpenPrice()>test(OP_BUY) Hbuys++;
}
}
}
return(Hbuys);
}
Tüm desteğiniz için teşekkür ederim. Daha fazlasını öğreniyorum ve tüm yardımlarınızla tüm isteklerimi düzeltiyorum... AMA.
Bir tane daha var ^^.
Hatırlamak için bir void işlevine ihtiyacım var ve bu iki kodun birleşimi olmalı.
İlk, son openorder'ı bulur. ve ikincisi, açık fiyatı daha yüksek olan açık siparişin numarasını bulur.
Doğrudan en yüksek openorderprice'a sahip siparişin numarasına sahip olmak için bir işlev yapmam gerekiyor.
Teşekkür ederim
OrderSelect(i, SELECT_BY_POS);
if(OrderSymbol() == Symbol() && OrderType() == TYPE ) {
if(TYPE == OP_BUY) {
double OPrice = OrderOpenPrice();[/PHP]
if(OrderSelect(e,SELECT_BY_POS,MODE_TRADES)==false ) break;
if(OrderSymbol() == Symbol() && OrderType() == TYPE) {
if(TYPE == OP_BUY) {
if(OrderOpenPrice()>test(OP_BUY) Hbuys++;
}
}
}
return(Hbuys);
}
İkinci kodda bir hata yaptım. Bu doğru
[PHP]for(int e=0;e<OrdersTotal();e++) {
if(OrderSelect(e,SELECT_BY_POS,MODE_TRADES)==false ) sonu;
if(OrderSymbol() == Symbol() && OrderType() == TÜR) {
if(TYPE == OP_BUY) {
if(OrderOpenPrice()>OPrice Hbuys++;
}
}
}
dönüş(Hsatın alır);
}
dasio
void işlevi , herhangi bir değer döndürmeyen bir işlevdir. Eğer durum buysa, bunu yapmanın tek makul yolu, işleve referansla iletilecek bazı değişkenleri kullanmaktır (benim deneyimime göre, bu amaç için global kapsam değişkenlerini kullanmak çok kötü bir uygulamadır - yapılandırılmış kodlama kurallarından kaçınır, ve hata aranması gereken durumlarda, bu tür değişkenlerin kullanılması bir kabustur). Aklından geçen bu muydu?
İkinci kodda bir hata yaptım. Bu doğru
if(OrderSelect(e,SELECT_BY_POS,MODE_TRADES)==false ) break;
if(OrderSymbol() == Symbol() && OrderType() == TYPE) {
if(TYPE == OP_BUY) {
if(OrderOpenPrice()>OPrice Hbuys++;
}
}
}
return(Hbuys);
}
dasio void işlevi, herhangi bir değer döndürmeyen bir işlevdir. Eğer durum buysa, bunu yapmanın tek makul yolu, işleve referansla iletilecek bazı değişkenleri kullanmaktır (benim deneyimime göre, bu amaç için global kapsam değişkenlerini kullanmak çok kötü bir uygulamadır - yapılandırılmış kodlama kurallarından kaçınır, ve hata aranması gereken durumlarda, bu tür değişkenlerin kullanılması bir kabustur). Aklından geçen bu muydu?
Cevabın için teşekkürler,
Açılan son siparişe göre sadece en yüksek açık siparişe ve en düşük açık siparişe sahip satın alma sayısına ihtiyacım var.
Bazı kontroller için sonucu nasıl bir vois işlevine dönüştüreceğimi kullanmalıyım.
Yani istendiğinde bu kaydı geri çağırmak çok daha basittir. Belki bu şekilde basitçe hatırlayabilirim CalculateCurrentBuy(Symbol())
int Hopen=0;
for(int i=0;i<OrdersTotal();i++) {
code here
}
}
return(Hopen);
}
takip eden ızgara?
{
if(Set.SELLSTOP && s.ticketP==0){
OrderSend(Symbol(),OP_SELLSTOP,Sell.Lots+i*Sell.Multiplier,Ask-i*(Trail.SELLSTOP.Orders.Distance)*myPoint,0,0,0,0,0,0,CLR_NONE);}
if(Set.BUYSTOP && b.ticketP==0){
OrderSend(Symbol(),OP_BUYSTOP,Buy.Lots+i*Buy.Multiplier,Bid+i*(Trail.BUYSTOP.Orders.Distance)*myPoint,0,0,0,0,0,0,CLR_NONE);}
}[/CODE]
I can set a grid using the above code but how do I get the Buy Grid and Sell grid grid to trail independently or as a set and retain the separate grid spacing? I have tried all sorts of things and must be missing something obvious. All I get is either all the pending orders move to the same level and then trail as a group or the pending orders start moving up and down with the price action.
[CODE] void TrailingOrders() {
if (Trail.BUYSTOP.Orders && OrderType()==OP_BUYSTOP) {
if (OrderOpenPrice()-Ask>(Trail.BUYSTOP.Orders.Distance)*myPoint) {
OrderModify(OrderTicket(),Ask+OrderOpenPrice()+(Trail.BUYSTOP.Orders.Distance)*myPoint,OrderStopLoss(),OrderTakeProfit(), 0, Aqua);
}
}
if (Trail.SELLSTOP.Orders && OrderType()==OP_SELLSTOP) {
if (Bid-OrderOpenPrice()>(Trail.SELLSTOP.Orders.Distance)*myPoint) {
OrderModify(OrderTicket(),Bid-OrderOpenPrice()-(Trail.SELLSTOP.Orders.Distance)*myPoint,OrderStopLoss(),OrderTakeProfit(), 0, Yellow);
}
}
}Bu kod 2 siparişi takip edecek ancak daha fazlasını takip edecek şekilde nasıl değiştirebilirim? Takip eden kodu, yukarıdaki ızgara kodu gibi birden çok seviye için ayarlamaya çalıştığımda, kremaya dönüşüyor.
Herhangi bir anlayış takdir edilecektir.
Saygılarımızla
...
cja
Aşağıdaki kodla denedim ve sorunsuz çalışıyor (örnek resme bakın: zaten uygulanmış farklı adımlar)
s.ticketP ve b.ticketP değişkenlerinin ne olduğunu bilmiyordum, bu yüzden kodda gördüğünüz gibi kullanıldı.
extern double Trail.BUYSTOP.Orders.Distance = 20;
extern int Stop.Order.Levels = 4;
extern double Sell.Lots = 0.1;
extern double Sell.Multiplier = 0.1;
extern double Buy.Lots = 0.1;
extern double Buy.Multiplier = 0.2;
extern bool Set.SELLSTOP = true;
extern bool Set.BUYSTOP = true;
int init()
{
return(0);
}
int start()
{
double myPoint=1; if (Digits==3 || Digits==5) myPoint=10; myPoint *= Point;
static int s.ticketP=0;
static int b.ticketP=0;
for(int i = 1; i < Stop.Order.Levels+1; i++)
{
if(Set.SELLSTOP && s.ticketP==0){ OrderSend(Symbol(),OP_SELLSTOP,Sell.Lots+i*Sell.Multiplier,Bid-i*(Trail.SELLSTOP.Orders.Distance)*myPoint,0,0,0,0,0,0,CLR_NONE);}
if(Set.BUYSTOP && b.ticketP==0){ OrderSend(Symbol(),OP_BUYSTOP ,Buy.Lots+i *Buy.Multiplier ,Ask+i*(Trail.BUYSTOP.Orders.Distance)*myPoint ,0,0,0,0,0,0,CLR_NONE);}
}
s.ticketP=Stop.Order.Levels;
b.ticketP=Stop.Order.Levels;
return(0);
}
{
if(Set.SELLSTOP && s.ticketP==0){
OrderSend(Symbol(),OP_SELLSTOP,Sell.Lots+i*Sell.Multiplier,Ask-i*(Trail.SELLSTOP.Orders.Distance)*myPoint,0,0,0,0,0,0,CLR_NONE);}
if(Set.BUYSTOP && b.ticketP==0){
OrderSend(Symbol(),OP_BUYSTOP,Buy.Lots+i*Buy.Multiplier,Bid+i*(Trail.BUYSTOP.Orders.Distance)*myPoint,0,0,0,0,0,0,CLR_NONE);}
}[/CODE]
I can set a grid using the above code but how do I get the Buy Grid and Sell grid grid to trail independently or as a set and retain the separate grid spacing? I have tried all sorts of things and must be missing something obvious. All I get is either all the pending orders move to the same level and then trail as a group or the pending orders start moving up and down with the price action.
[CODE] void TrailingOrders() {
if (Trail.BUYSTOP.Orders && OrderType()==OP_BUYSTOP) {
if (OrderOpenPrice()-Ask>(Trail.BUYSTOP.Orders.Distance)*myPoint) {
OrderModify(OrderTicket(),Ask+OrderOpenPrice()+(Trail.BUYSTOP.Orders.Distance)*myPoint,OrderStopLoss(),OrderTakeProfit(), 0, Aqua);
}
}
if (Trail.SELLSTOP.Orders && OrderType()==OP_SELLSTOP) {
if (Bid-OrderOpenPrice()>(Trail.SELLSTOP.Orders.Distance)*myPoint) {
OrderModify(OrderTicket(),Bid-OrderOpenPrice()-(Trail.SELLSTOP.Orders.Distance)*myPoint,OrderStopLoss(),OrderTakeProfit(), 0, Yellow);
}
}
}Bu kod 2 siparişi takip edecek ancak daha fazlasını takip edecek şekilde nasıl değiştirebilirim? Takip eden kodu, yukarıdaki ızgara kodu gibi birden çok seviye için ayarlamaya çalıştığımda, kremaya dönüşüyor.
Herhangi bir anlayış takdir edilecektir.
Saygılarımızlaizlenen ızgara
cja
Aşağıdaki kodla denedim ve sorunsuz çalışıyor (örnek resme bakın: zaten uygulanmış farklı adımlar)
s.ticketP ve b.ticketP değişkenlerinin ne olduğunu bilmiyordum, bu yüzden kodda gördüğünüz gibi kullanıldı.
extern double Trail.BUYSTOP.Orders.Distance = 20;
extern int Stop.Order.Levels = 4;
extern double Sell.Lots = 0.1;
extern double Sell.Multiplier = 0.1;
extern double Buy.Lots = 0.1;
extern double Buy.Multiplier = 0.2;
extern bool Set.SELLSTOP = true;
extern bool Set.BUYSTOP = true;
int init()
{
return(0);
}
int start()
{
double myPoint=1; if (Digits==3 || Digits==5) myPoint=10; myPoint *= Point;
static int s.ticketP=0;
static int b.ticketP=0;
for(int i = 1; i < Stop.Order.Levels+1; i++)
{
if(Set.SELLSTOP && s.ticketP==0){ OrderSend(Symbol(),OP_SELLSTOP,Sell.Lots+i*Sell.Multiplier,Bid-i*(Trail.SELLSTOP.Orders.Distance)*myPoint,0,0,0,0,0,0,CLR_NONE);}
if(Set.BUYSTOP && b.ticketP==0){ OrderSend(Symbol(),OP_BUYSTOP ,Buy.Lots+i *Buy.Multiplier ,Ask+i*(Trail.BUYSTOP.Orders.Distance)*myPoint ,0,0,0,0,0,0,CLR_NONE);}
}
s.ticketP=Stop.Order.Levels;
b.ticketP=Stop.Order.Levels;
return(0);
}
merhaba mladen,
Yardımınız için teşekkürler, ancak yukarıdaki mesajımda kendimi çok net ifade edememiş olabilirim. Bir ızgara ayarlamakla ilgili bir sorunum yok, sahip olduğum sorun , sipariş ayrımını kaybetmeden ızgarayı takip etmek.
s.ticketP & b.ticketP basitçe, EA'nın başka bir yerinde kullanılan SATIN AL ve SATIN AL bekleyen siparişler kodunu ifade eder.
Saygılarımızla
izlenen ızgara
merhaba mladen,
Yardımınız için teşekkürler, ancak yukarıdaki mesajımda kendimi çok net ifade edememiş olabilirim. Bir ızgara ayarlamakla ilgili bir sorunum yok, sahip olduğum sorun , sipariş ayrımını kaybetmeden ızgarayı takip etmek.
s.ticketP & b.ticketP basitçe, EA'nın başka bir yerinde kullanılan SATIN AL ve SATIN AL bekleyen siparişler kodunu ifade eder.
Saygılarımızlamerhaba mladen,
Buna bakmak için zamanın var mı?
Saygılarımızla CJA