Nasıl kodlanır? - sayfa 186

 

Tamam, orijinal soruda:

#property indicator_chart_window

#property indicator_buffers 1

#property indicator_color1 Magenta

extern int MAPeriod=200;

extern double iController = 1.386;

//---- buffers

//double Memory[200];

double ExtMapBuffer1[];

int limit = 200;

//---- variables

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+

int init()

{

IndicatorBuffers(1);

//---- drawing settings

SetIndexBuffer(0,ExtMapBuffer1);

SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);

IndicatorShortName( "Antaria_Rising");

//---- initialization done

return(0);

}

int start()

{

int limit;

//ExtMapBuffer1[1] = ExtMapBuffer1[0];

//ExtMapBuffer1[0] = iController;

for(int i=(0); i<=(limit-1); i++)

{

ExtMapBuffer1 = ExtMapBuffer1;

}

ExtMapBuffer1[0] = iController;

return(0);

}[/CODE]

Above is the code for the indicator. Simply, it draws a line that should be updatable via the EA using the intiially mentioned code:

[CODE]temp = iCustom(NULL, 0, "AntariaRising", 200, 1.2, 0, 0); //temp not used. Function returns a double

Sanırım, izlediği değişkeni incicator nesnesine güncellememe izin veren son kod parçasını değiştirmek istiyorum, böylece daha sonra onu bir durdurma satırı olarak kullanabilirim. Ancak kalan kod alakasız. Yukarıdaki işlevi çalıştırdığımda, antaria'nın konumunu 1.39'dan veya her ne başlarsa başlasın 1.2'ye hareket etmesini bekliyorum. 200 değişkenini kullanıp kullanmadığımı hatırlayamıyorum. Sanırım üstbilgi ve altbilgi yorumlarımı kestim, ancak tüm köle göstergesi orada, bu da AntariaRising'in hemen yukarıdaki kodda kastedildiği

gösterge nesneleriyle konuşan bulabildiğim tek işlev buydu ve diğer alanlardaki değerleri okumak için kullanıyorum.

 

Gösterge kodunuz hakkında. Yanlış.

Var. limit hiç sıfıra eşit.

Dizeyi çıkarın:

int limiti;

başından beri().

 

Bu kodla bana yardım edin pls

birinin bana bu kodla yardım etmesini istiyorum, istediğim zaman ticareti açıyorum ama otomatik olarak kapatıyorum, bu yüzden zararı durdur ile ticaret yapmasını istiyorum, tekrar geçiş yapmadığında kapanmaması, kod bu

//+------------------------------------------- -------------------+

//| JR300.mq4 |

//| tek aşk |

//| Forex Forumu | Forex Tsd | MetaTrader Forumu |

//+------------------------------------------- -------------------+

#özellik telif hakkı "oneLove"

#özellik bağlantısı "https://www.forex-tsd.com"

//---- giriş parametreleri

harici çift TakeProfit=250.0;

dış çift Lot = 0.1;

harici çift TrailingStop=35.0;

//+------------------------------------------- -------------------+

//| uzman başlatma işlevi |

//+------------------------------------------- -------------------+

int init()

{

//----

//----

dönüş(0);

}

//+------------------------------------------- -------------------+

//| uzman sıfırlama işlevi |

//+------------------------------------------- -------------------+

int tanım()

{

//----

//----

dönüş(0);

}

int Çapraz (çift satır1, çift satır2)

{

statik int son_yön = 0;

statik int akım_yön = 0;

if(line1>line2)current_direction = 1; //yukarı

if(line1<line2)current_direction = 2; //aşağı

if(current_direction != last_direction) //değiştirildi

{

last_direction = current_direction;

dönüş (son_yön);

}

başka

{

dönüş (0);

}

}

//+------------------------------------------- -------------------+

//| uzman başlatma işlevi |

//+------------------------------------------- -------------------+

int başlangıç()

{

//----

int cnt, bilet, toplam;

çift kısaEma, uzunEma;

if(Çubuklar<100)

{

Print("100'den küçük barlar");

dönüş(0);

}

if(Kâr Al<10)

{

Print("10'dan az Kar Al");

dönüş(0); // TakeProfit'i kontrol edin

}

shortEma = iMA(NULL,0,1,0,MODE_EMA,PRICE_CLOSE,0);

longEma = iMA(NULL,0,200,0,MODE_SMA,PRICE_CLOSE,0);

int isCrossed = Çapraz (shortEma,longEma);

toplam = SiparişlerToplam();

if(toplam < 1)

{

if(isCrossed == 1)

{

bilet=SiparişGönder(Symbol(),OP_BUY,Lots,Sor,3,0,Ask+TakeProfit*Puan,

"EA'm",12345,0,Yeşil);

if(bilet>0)

{

if(OrderSelect(bilet,SELECT_BY_TICKET,MODE_TRADES))

Print("Satın alma emri açıldı : ",OrderOpenPrice());

}

else Print("SATIN AL emri açılırken hata oluştu : ",GetLastError());

dönüş(0);

}

if(isCrossed == 2)

{

bilet=SiparişGönder(Symbol(),OP_SELL,Lots,Bid,3,0,

Bid-TakeProfit*Point,"My EA",12345,0,Kırmızı);

if(bilet>0)

{

if(OrderSelect(bilet,SELECT_BY_TICKET,MODE_TRADES))

Print("SAT emri açıldı : ",OrderOpenPrice());

}

else Print("SATIŞ emrini açarken hata: ",GetLastError());

dönüş(0);

}

dönüş(0);

}

for(cnt=0;cnt<toplam;cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())

{

if(OrderType()==OP_BUY) // uzun pozisyon açıldı

{

// kapatılmalı mı?

if(isCrossed == 2)

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);

// konumu kapat

dönüş(0); // çıkış

}

// takip eden durdurmayı kontrol et

if(TrailingStop>0)

{

if(Bid-OrderOpenPrice()>Point*TrailingStop)

{

if(OrderStopLoss()<Teklif Noktası*TrailingStop)

{

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-

Point*TrailingStop,OrderTakeProfit(),0,Yeşil);

dönüş(0);

}

}

}

}

else // kısa pozisyona git

{

// kapatılmalı mı?

if(isCrossed == 1)

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);

// konumu kapat

dönüş(0); // çıkış

}

// takip eden durdurmayı kontrol et

if(TrailingStop>0)

{

if((OrderOpenPrice()-Ask)>(Nokta*TrailingStop))

{

if((OrderStopLoss()>(Ask+Point*TrailingStop)) ||

(SiparişStopLoss()==0))

{

OrderModify(OrderTicket(),OrderOpenPrice(),Sor+Point*TrailingStop,

OrderTakeProfit(),0,Kırmızı);

dönüş(0);

}

}

}

}

}

}

dönüş(0);

}

//+------------------------------------------- -------------------+

 

Bunu dene:

//+------------------------------------------------------------------+

//| JR300.mq4 |

//| onelove |

//| Forex Forum | Forex Tsd | Metatrader Forum |

//+------------------------------------------------------------------+

#property copyright "oneLove"

#property link "https://www.forex-tsd.com"

//---- input parameters

extern double TakeProfit=250.0;

extern double StopLoss=100.0;

extern double Lots=0.1;

extern double TrailingStop=35.0;

//+------------------------------------------------------------------+

//| expert initialization function |

//+------------------------------------------------------------------+

int init()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| expert deinitialization function |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

int Crossed (double line1 , double line2)

{

static int last_direction = 0;

static int current_direction = 0;

if(line1>line2)current_direction = 1; //up

if(line1<line2)current_direction = 2; //down

if(current_direction != last_direction) //changed

{

last_direction = current_direction;

return (last_direction);

}

else

{

return (0);

}

}

//+------------------------------------------------------------------+

//| expert start function |

//+------------------------------------------------------------------+

int start()

{

//----

int cnt, ticket, total;

double shortEma, longEma;

if(Bars<100)

{

Print("bars less than 100");

return(0);

}

if(TakeProfit<10)

{

Print("TakeProfit less than 10");

return(0); // check TakeProfit

}

shortEma = iMA(NULL,0,1,0,MODE_EMA,PRICE_CLOSE,0);

longEma = iMA(NULL,0,200,0,MODE_SMA,PRICE_CLOSE,0);

int isCrossed = Crossed (shortEma,longEma);

total = OrdersTotal();

if(total < 1)

{

if(isCrossed == 1)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+ TakeProfit*Point,

"My EA",12345,0,Green);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES ))

Print("BUY order opened : ",OrderOpenPrice());

}

else Print("Error opening BUY order : ",GetLastError());

return(0);

}

if(isCrossed == 2)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,

Bid-TakeProfit*Point,"My EA",12345,0,Red);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES ))

Print("SELL order opened : ",OrderOpenPrice());

}

else Print("Error opening SELL order : ",GetLastError());

return(0);

}

return(0);

}

for(cnt=0;cnt<total;cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())

{

if(OrderType()==OP_BUY) // long position is opened

{

// should it be closed?

//if(isCrossed == 2)

//{

//OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet) ;

// close position

//return(0); // exit

//}

// check for trailing stop

if(TrailingStop>0)

{

if(Bid-OrderOpenPrice()>Point*TrailingStop)

{

if(OrderStopLoss()<Bid-Point*TrailingStop)

{

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-

Point*TrailingStop,OrderTakeProfit(),0,Green);

return(0);

}

}

}

}

else // go to short position

{

// should it be closed?

//if(isCrossed == 1)

//{

//OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet) ;

// close position

//return(0); // exit

//}

// check for trailing stop

if(TrailingStop>0)

{

if((OrderOpenPrice()-Ask)>(Point*TrailingStop))

{

if((OrderStopLoss()>(Ask+Point*TrailingStop)) ||

(OrderStopLoss()==0))

{

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,

OrderTakeProfit(),0,Red);

return(0);

}

}

}

}

}

}

return(0);

}

//+------------------------------------------------------------------+
 

teşekkürler

Roger09:
Bunu dene:
//+------------------------------------------------------------------+

//| JR300.mq4 |

//| onelove |

//| Forex Forum | Forex Tsd | Metatrader Forum |

//+------------------------------------------------------------------+

#property copyright "oneLove"

#property link "https://www.forex-tsd.com"

//---- input parameters

extern double TakeProfit=250.0;

extern double StopLoss=100.0;

extern double Lots=0.1;

extern double TrailingStop=35.0;

//+------------------------------------------------------------------+

//| expert initialization function |

//+------------------------------------------------------------------+

int init()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| expert deinitialization function |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

int Crossed (double line1 , double line2)

{

static int last_direction = 0;

static int current_direction = 0;

if(line1>line2)current_direction = 1; //up

if(line1<line2)current_direction = 2; //down

if(current_direction != last_direction) //changed

{

last_direction = current_direction;

return (last_direction);

}

else

{

return (0);

}

}

//+------------------------------------------------------------------+

//| expert start function |

//+------------------------------------------------------------------+

int start()

{

//----

int cnt, ticket, total;

double shortEma, longEma;

if(Bars<100)

{

Print("bars less than 100");

return(0);

}

if(TakeProfit<10)

{

Print("TakeProfit less than 10");

return(0); // check TakeProfit

}

shortEma = iMA(NULL,0,1,0,MODE_EMA,PRICE_CLOSE,0);

longEma = iMA(NULL,0,200,0,MODE_SMA,PRICE_CLOSE,0);

int isCrossed = Crossed (shortEma,longEma);

total = OrdersTotal();

if(total < 1)

{

if(isCrossed == 1)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+ TakeProfit*Point,

"My EA",12345,0,Green);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES ))

Print("BUY order opened : ",OrderOpenPrice());

}

else Print("Error opening BUY order : ",GetLastError());

return(0);

}

if(isCrossed == 2)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,

Bid-TakeProfit*Point,"My EA",12345,0,Red);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES ))

Print("SELL order opened : ",OrderOpenPrice());

}

else Print("Error opening SELL order : ",GetLastError());

return(0);

}

return(0);

}

for(cnt=0;cnt<total;cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())

{

if(OrderType()==OP_BUY) // long position is opened

{

// should it be closed?

//if(isCrossed == 2)

//{

//OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet) ;

// close position

//return(0); // exit

//}

// check for trailing stop

if(TrailingStop>0)

{

if(Bid-OrderOpenPrice()>Point*TrailingStop)

{

if(OrderStopLoss()<Bid-Point*TrailingStop)

{

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-

Point*TrailingStop,OrderTakeProfit(),0,Green);

return(0);

}

}

}

}

else // go to short position

{

// should it be closed?

//if(isCrossed == 1)

//{

//OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet) ;

// close position

//return(0); // exit

//}

// check for trailing stop

if(TrailingStop>0)

{

if((OrderOpenPrice()-Ask)>(Point*TrailingStop))

{

if((OrderStopLoss()>(Ask+Point*TrailingStop)) ||

(OrderStopLoss()==0))

{

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,

OrderTakeProfit(),0,Red);

return(0);

}

}

}

}

}

}

return(0);

}

//+------------------------------------------------------------------+

teşekkürler roger09 Tanrı seni korusun

 

Teşekkürler Roger, bu ikinci limit bildirimini start fonksiyonumdan kaldırdım. Derleyicinin buna izin vermesine şaşırdım, ancak programımı belirgin şekilde etkilemedi.

Yine de, bu göstergenin çalışan örneğini EA'mdan nasıl değiştireceğimden emin değilim. Bir yöntem çok takdir edilecektir veya en azından API'nin şu anda çalışan göstergelere bilgi aktarmama izin vermediğinin doğrulanması.

Teşekkürler.

 
yingli:
Burada biraz yardım almak için bu adıma başlıyorum. Ekteki göstergeyi kodlamayı öğreniyorum. Ancak işe yaramadı. Yardımcı olabilecek var mı? Bu çok güvenilir bir göstergedir ve eğer birisi bunun için bir EA yapabilirse .bu neredeyse kutsal bir kâsedir.

Temel ilke:

1. kırmızı ok göründüğünde Satış pozisyonunu açın,

2 beyaz ok göründüğünde satın alma pozisyonunu açın ve tüm bu satış pozisyonlarını/pozisyonlarını otomatik olarak kapatın.

3. Herhangi bir zaman dilimi için başvurun.

4. kaybı durdurma yok,

5. sipariş fonksiyonu ekleyin.

Yanıt bekliyorum!

//+------------------------------------------- -------------------+

//| IINWMARROWS.mq4 |

//| EMA_CROSS.mq4 temel alınarak |

//| Telif hakkı ?2006, MetaQuotes Software Corp. |

//| Forex Ticaret Yazılımı: Forex Ticaret Platformu MetaTrader 4 |

//| Son küçük değişiklik Iin Zulkarnain tarafından |

//+------------------------------------------- -------------------+

#property telif hakkı "Telif hakkı ?2006, MetaQuotes Software Corp."

#özellik bağlantısı "http://www.metaquotes.net"

//----

#özellik göstergesi_chart_window

#özellik göstergesi_tamponları 2

#özellik göstergesi_renk1 Beyaz

#özellik göstergesi_renk2 Kırmızı

#özellik göstergesi_width1 2

#özellik göstergesi_width2 2

//----

çift Çapraz[];

çift CrossDown[];

harici int FasterMode=3; //0=sma, 1=ema, 2=smma, 3=lwma

harici int Daha HızlıMA= 3;

extern int SlowerMode=3; //0=sma, 1=ema, 2=smma, 3=lwma

harici int Daha YavaşMA= 3;

//+------------------------------------------- -------------------+

//| Özel gösterge başlatma işlevi |

//+------------------------------------------- -------------------+

int init()

{

//---- göstergeler

SetIndexStyle(0, DRAW_OK, BOŞ);

SetIndexArrow(0, 233);

SetIndexBuffer(0, CrossUp);

SetIndexStyle(1, DRAW_OK, BOŞ);

SetIndexArrow(1, 234);

SetIndexBuffer(1, CrossDown);

//----

dönüş(0);

}

//+------------------------------------------- -------------------+

//| Özel gösterge sıfırlama işlevi |

//+------------------------------------------- -------------------+

int tanım()

{

//----

//----

dönüş(0);

}

//+------------------------------------------- -------------------+

//| Özel gösterge yineleme işlevi |

//+------------------------------------------- -------------------+

int başlangıç()

{

int limit, i, sayaç;

iki kat daha hızlıMAnow, daha yavaşMAnow, daha hızlıMAönceki, daha yavaşMAönceki, daha hızlıMAsonra, daha yavaşMAsonra;

çift Aralık, AvgRange;

int counted_bars=IndicatorCounted();

//---- olası hataları kontrol et

if(counted_bars<0) return(-1);

//---- son sayılan çubuk yeniden sayılacak

if(counted_bars>0) counted_bars--;

//----

limit=Barlar-sayılan_barlar;

for(i=0; i<=limit; i++)

{

sayaç=i;

Aralık=0;

OrtAralık=0;

for(sayaç=i ;sayaç<=i+9;sayaç++)

{

AvgRange=AvgRange+MathAbs(Yüksek[sayaç]-Düşük[sayaç]);

}

Aralık=OrtAralık/10;

daha hızlıMAnow=iMA(NULL, 0, FasterMA, 0, FasterMode, PRICE_CLOSE, i);

fastMAprevious=iMA(NULL, 0, FasterMA, 0, FasterMode, PRICE_CLOSE, i+1);

fastMAafter=iMA(NULL, 0, FasterMA, 0, FasterMode, PRICE_CLOSE, i-1);

//----

daha yavaşMAnow=iMA(BOŞ, 0, YavaşMA, 0, YavaşMod, PRICE_OPEN, i);

slowerMAprevious=iMA(NULL, 0, SlowerMA, 0, SlowMode, PRICE_OPEN, i+1);

slowerMAafter=iMA(NULL, 0, SlowerMA, 0, SlowerMode, PRICE_OPEN, i-1);

if ((daha hızlıMAnow > daha yavaşMAnow) && (fasterMAönceki daha yavaşMAson)

{

CrossUp=Düşük - Aralık*0.5;

}

else if ((fasterMAnow daha slowerMAprevious) && (fasterMAafter < slowerMAafter))

{

CrossDown=Yüksek + Aralık*0.5;

}

}

dönüş(0);

}

//+------------------------------------------- -------------------+doğru kodlamayı öğrenmek için bu konu, kodlamayı öğreniyorum

Herhangi biri bu gösterge için bir uyarı kodlamasına yardımcı olabilir, gerçekten harika .

 

George'un Oscar Hesap Makinesi - Bunun için bir gösterge kodlayan var mı?

Merhaba millet,

George Smith'in Forex Made-EZ'sine aşina olan var mı bilmiyorum.

Şu anda çalışmalarını inceliyorum ve kullandığı Oscar osilatörü için bir gösterge kodlayan var mı diye merak ediyorum.

formül

A = son sekiz çubuğun en yükseği olsun (bu dahil)

B = son sekiz çubuğun en düşük seviyesi (bu dahil)

C = mevcut barların kapanış fiyatı olsun

Let X = önceki osilatör figürü (Oscar)

Bugünün "kaba" osilatörü eşittir (CB) bölü (AB) çarpı 100.

Daha sonra kaba numaramızı (hadi Y diyelim) şöyle "pürüzsüzleştiriyoruz":

Son osilatör sayısı = ((X bölü 3 çarpı 2), artı (Y bölü 3).

Bunu kodlayan veya kodlayan varsa çok makbule geçer.

Saygılar Steve

 

Ters İzleyen Durdurma

Merhaba,

Bir fikir konusunda yardım istiyorum.

EA'larımda takip eden duraklar kullanıyorum (3 adımlı takip), ancak kayıpları korumak için ters çevrilmiş şeyi yapmak istiyorum.

Anlatmaya çalışacağım:

İlk durdurma kaybıyla bir sipariş açarım.

İşlem zarar yönünde 15 pip giderse ve 10 pip geri gelirse, işlemi kapatın (ilk adım).

İşlem kayıp yönünde 30 pip giderse ve 15 pip geri gelirse, işlemi kapatın (ikinci adım).

Bunun gibi bir şey.

Yardım için teşekkürler

 
dedreko:
Merhaba,

Bir fikir konusunda yardım istiyorum.

EA'larımda takip eden duraklar kullanıyorum (3 adımlı takip), ancak kayıpları korumak için ters çevrilmiş şeyi yapmak istiyorum.

Anlatmaya çalışacağım:

İlk durdurma kaybıyla bir sipariş açarım.

İşlem zarar yönünde 15 pip giderse ve 10 pip geri gelirse, işlemi kapatın (ilk adım).

İşlem kayıp yönünde 30 pip giderse ve 15 pip geri gelirse, işlemi kapatın (ikinci adım).

Bunun gibi bir şey.

Yardım için teşekkürler

Bu benim için yeni bir şey.

Yani, kaybeden ticaret kapanışının her zaman geri dönene kadar beklemesi gerekiyor, değil mi?

Peki ya geri tepme olmazsa?

İlk SL'de kapatacak mıyız?

Neden: