Kodlama yardımı.. Uyarı yerine filtrelenecek göstergeyi nasıl alabilirim? - sayfa 7

 
Maji:
Üzgünüm, kodun tamamını incelemek için zamanım yok, ancak bu snippet'i inceleyelim.

if(OrderSymbol()==Symbol() && OrderType()==OP_SELL && Bid+Profit>OrderOpenPrice())

Diyelim ki OrderOpenPrice = 1.2100

ve kar 0.0010

Bu nedenle, teklif 1.2100-0.0010 = 1.2090'dan küçük veya buna eşitse kısa ticareti kapatmak istersiniz.

Diyelim ki bir boşluk oldu ve fiyatlar 1.2090'ı atladı ve şimdi teklif fiyatı 1.2088. Formülünüze göre,

Teklif + Kar = 1.2088 + 0.0010 = 1.2098. Sisteminiz kar eşiğini aşmış olsa bile OrderOpenPrice'den büyük DEĞİLDİR. Böylece sipariş kapatılmayacaktır. Bana göre kapanış koşulunun mantığının yeniden değerlendirilmesi ve yeniden yazılması gerekiyor. Ayrıca, kısa işlemlerle uğraşırken Alış fiyatları ile işlem yapmalısınız, çünkü işlemi yalnızca satış fiyatından kapatabilirsiniz.

Bir tavsiye daha,

for (int cnt = 0 ; cnt = 0; cnt--) veya benzeri bir sayım döngüsü.

İyi şanlar.

Bunu öğrendiğim için minnettarım, teşekkürler Maji! Zaten bunda istediğim kapanış mantığı bu değil... Bunun tetiklenip tetiklenmediğini tam olarak nasıl tespit edeceğimi anlamadığım için, bu kapanma zamanı kapanış stratejisini, amaçladığım şeyi yapmak için nasıl programlayacağımı öğrenene kadar kullanamam.

 

Yeni Kapanış Kriterleri...kodu doğru yerleştirmeme yardım edin lütfen...

Buna başka bir kapanış kriteri koymak için biraz yardıma ihtiyacım var; bu, longEMA'nın minör trend belirleyicinin (eğer uzunsa) altına inmesi ve kısaysa tam tersi olmasıdır. Bu yeni kriterlerle kapatmak için uzun ve kısa açık pozisyonları nasıl izole edeceğimi tam olarak bilmiyorum.

#property copyright "Copyright 2006, Aaragorn"

//+--------- settings may vary use at your own risk-----------------+

//+--------------user inputs--------------------+

extern double Trendsetter = 250;

extern double Minortrendsetter = 150;

extern double LongEMA = 20;

extern double ShortEMA = 5;

extern double TrailingStop = 15;

extern double TrailingStopTrigger = 1;

extern double StopLoss = 186;

extern double TakeProfit = 250;

extern double Lots = 0.1;

extern double EquityStop = 9;

//---- Custom "Channel-1" Indicator and Filter Parameters

extern int Hours=36;

extern color col=SkyBlue;

extern double TF = 60; //--which bar period for the custom indicator to use

extern double upperproximity = 30; //---disallows long orders within this proximity to resistance line

extern double lowerproximity = 30; //---disallows short orders within this proximity to the support line

//+-----------close based on not triggering trailing stop in allotted time----------------+

extern int MonitorInMinutes = 60; // minutes after open to check state of trade

extern int ThresholdMove = 11; // if after that time we don't have +'x' pips we will exit

extern int MinsMultiplier = 600; // multiplies the MonitorInMinutes to make minutes (if 'x'=60) into hours

//+----------------------end of allotted time user inputs-----------------------------+

//+-----------------------------end of user inputs----------------------------------+

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

//| expert start function

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

int start(){

CloseOrder();

int cnt, ticket;

if(Bars<100){

Print("bars less than 100");

return(0);

}

//+----------------------Get Moving Average(s) Data----------------------------------------+

double currentlong=iMA(NULL,0,LongEMA,0,MODE_EMA,PRICE_CLOSE,0);//--current period longEMA

double currentshort=iMA(NULL,0,ShortEMA,0,MODE_EMA,PRICE_CLOSE,0);//--current period shortEMA

double trendsetter=iMA(NULL,0,Trendsetter,0,MODE_EMA,PRICE_CLOSE,0);//--current period TrendsetterEMA

double minorts=iMA(NULL,0,Minortrendsetter,0,MODE_EMA,PRICE_CLOSE,0);//--current period MinortrendsetterEMA

double prevlong=iMA(NULL,0,LongEMA,0,MODE_EMA,PRICE_CLOSE,1);//--previous period longEMA

double prevshort=iMA(NULL,0,ShortEMA,0,MODE_EMA,PRICE_CLOSE,1);//--previous period shortEMA

double prevtrendsetter=iMA(NULL,0,Trendsetter,0,MODE_EMA,PRICE_CLOSE,1);//--previous period TrendsetterEMA

double prevminorts=iMA(NULL,0,Minortrendsetter,0,MODE_EMA,PRICE_CLOSE,1);//--previous period MinortrendsetterEMA

//+----------------------------end of Get Moving Average(s) Data-----------------------------+

//+--------------------channel filter---------------------------+

double resistance = iCustom(NULL,TF,"Channel-1",Hours,col,0,0);

double support = iCustom(NULL,TF,"Channel-1",Hours,col,2,0);

//+------------------- end channel filter------------------------+

//+---------Obnoxious money management code needs revision----------------+

int total=OrdersTotal();

if(total<1){

if(AccountFreeMargin()<(1000*Lots)){

Print("We have no money. Free Margin = ", AccountFreeMargin());

return(0);

}

//+---------end of Obnoxious money management code-----------------+

//+---------------------------------------Order Entry--------------------------------------------+

//+---------enter long positions----------+

if (prevshortcurrentlong && currentshort>currentlong>Trendsetter && Ask > resistance - upperproximity*Point){ //---conditions to open long positions change as desired

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point, NULL,16384,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);

}

//+---------enter short positions----------+

if (prevshort>prevlong && currentshort<currentlong && currentshort<currentlong<Trendsetter && Ask < support + lowerproximity*Point){ //---conditions to open short positions change as desired

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point, NULL,16384,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);

}

}

//+---------end of order entry-------------------------+

//+-------------------------Trailing Stop Code------------------------------------+

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

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

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

if(OrderType()==OP_BUY){

if(TrailingStop>0) {

if(Bid-OrderOpenPrice()>Point*TrailingStopTrigger) {

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

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);

return(0);

}

}

}

}else{

if(TrailingStop>0) {

if((OrderOpenPrice()-Ask)>(Point*TrailingStopTrigger)) {

if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0)) {

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);

return(0);

}

}

}

}

//+-------------------------End of Trailing Stop Code----------------------------+

//+---------------------Equity Stop Code---------------------------+

if((AccountEquity()+ EquityStop)<AccountBalance()) {

{

int ttotal = OrdersTotal();

for(int i=ttotal-1;i>=0;i--)

{

OrderSelect(i, SELECT_BY_POS);

int type = OrderType();

bool result = false;

switch(type)

{

//Close opened long positions

case OP_BUY : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red );

break;

//Close opened short positions

case OP_SELL : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red );

}

if(result == false)

{

Alert("Order " , OrderTicket() , " failed to close. Error:" , GetLastError() );

Sleep(3000);

}

}

return(0);

}

}

}

}

}

//+---------------------End of Equity Stop Code---------------------------+

//|

//+---------------------Close Based on Time-------------------------------+

//+--------------needs revision, not working as desired---------------------+

//+------------I want it to close IF and ONLY IF trailing stop is NOT triggered-------------+

void CloseOrder()

{

double Profit=ThresholdMove*Point;

int total = OrdersTotal();

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

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if ((CurTime()-OrderOpenTime())>MonitorInMinutes*60*MinsMultiplier)

{

if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && Bid-Profit<OrderOpenPrice() )

{

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

}

if(OrderSymbol()==Symbol() && OrderType()==OP_SELL && Bid+Profit>OrderOpenPrice())

{

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

}

}

}

}

//+---------------------------end of close on time code---------------+
 

tamam şimdi kodun bu kısmını anlamam gerekiyor ....

ilk satır sayıları

ikinci satır sayılan siparişleri seçer

üçüncü satır..bu beni kandırıyor..Sanırım seçilen emrin satış olup olmadığını bilmek istiyor..ama "0'ın nesi var? Yani burada BEŞ 'eğer' satırı var...

Sanırım bunlardan herhangi biri doğruysa, o zaman sırayı değiştirecek, aksi takdirde...Sanırım ..'else'ye gidiyor ve ...peki bu bir şekilde hem uzun hem de kısa pozisyonlarla başa çıkmayı başarıyor ama ben bilmiyorum henüz anlamadın.

Minör trend belirleyiciEMA ile longEMA'nın çaprazını temel alarak uzun veya kısa kapatmak için kriterler eklemek istediğim için...Bunu nerede yapacağımdan emin değilim.

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

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

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

if(OrderType()==OP_BUY){

if(TrailingStop>0) {

if(Bid-OrderOpenPrice()>Point*TrailingStopTrigger) {

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

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);

return(0);

}

}

}

}else{

if(TrailingStop>0) {

if((OrderOpenPrice()-Ask)>(Point*TrailingStopTrigger)) {

if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0)) {

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);

return(0);

}

}

}

}

tamam anlıyorum ki tüm if'ler ve diğerleri bu satırlara yol açıyor. anlamam gerekenler bunlar..

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);

Bu sipariş değiştirme satırlarının nasıl oluşturulduğu hakkında daha fazla şey öğrenmem gerekiyor.. Emirleri değiştirenler kadar kapananlar da bunlar mı? yoksa sadece emirleri mi değiştiriyorlar ve başka bir şey emirleri mi kapatıyor?

 

MetaEditor'daki yardıma bakın

OP_BUY 0 Buying position.

OP_SELL 1 Selling position.

OP_BUYLIMIT 2 Buy limit pending position.

OP_SELLLIMIT 3 Sell limit pending position.

OP_BUYSTOP 4 Buy stop pending position.

OP_SELLSTOP 5 Sell stop pending position.

[/PHP]

so, <= OP_SELL is OP_BUY or OP_SELL. Just instead of using

[PHP]if((OrderType()==OP_SELL) || (OrderType()==OP_BUY) ...

Sadece daha az yazarak

 

İşte başlıyoruz

void CloseOrders(int op)

{

int tik[30], t = 0;

for(int i =0;i<OrdersTotal();i++){

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){

if(OrderSymbol()==Symbol() && MagicNum==OrderMagicNumber() && OrderType() == op){

tik[t] = OrderTicket(); t++;

}

}

}

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

{

if(OrderSelect(tik,SELECT_BY_TICKET)){

double prc = Bid;

if (op == OP_SELL) prc = Ask;

CloseOrder(tik, OrderLots(), prc);

}

}

}

Çağrı: CloseOrder(OP_BUY); // Tüm satın alma siparişlerini kapat

veya

CloseOrder(OP_SELL); // Tüm satış emirlerini kapat

Tüm sipariş biletlerini bir dizide tutmamın ve ardından silmemin nedeni, # 1 konumundaki siparişi kapattığımda sonrakinin tekrar 1 olması ve bir sorunumuz olması.

 

bunu unuttum

void CloseOrder(int ticket,double numLots,double close_price)

{

int CloseCnt, err;

// try to close 3 Times

CloseCnt = 0;

color clr = Violet;

if (OrderType() == OP_SELL)

clr = Orange;

while (CloseCnt < 3)

{

if (OrderClose(ticket,numLots,close_price,Slippage,clr))

{

CloseCnt = 3;

}

else

{

err=GetLastError();

Print(CloseCnt," Error closing order : (", err , ") " + ErrorDescription(err));

if (err > 0) CloseCnt++;

}

}

}

[/PHP]

and dont forget to add this line after #property link

[PHP]#property link "http://www.elihayun.com"

#include

 

hala kafam karıştı...

Bu kodu orijinal olarak oluşturmadığımı anlayın. Başka birinin ne yaptığını anlamaya ve değiştirmeye çalışıyorum. İsmimi mülk satırına ancak şimdi o kadar çok değiştirdiğim için koydum ki, artık orijinaline çok az benziyor. El değmeden bıraktığımdan daha fazlasını değiştirdim. Hala anlamadığım ve bu nedenle değiştiremediğim bazı yönleri var.

Aradığım şey, siparişleri kapatan kod... Görünen o ki, tüm bunlar sadece takip eden durağı güncellemek için değişiyor.

bu kapatmanın birden fazla yolu.

şu anda bu EA, stop loss ile kapatma yeteneğine sahiptir.

takip eden bir durdurma ile kapatmak için.

kar alma hedefiyle kapatmak.

veya açıldıktan sonra belirli bir süre geçmesine bağlı olarak kapatmak.

sahip olmasını istemediğim şey, longEMA minör trend belirleyiciEMA'ya geri dönerse kapanma yeteneğidir. bu geçişi kısa bir pozisyonu kapatmak için veya aşağı geçişi uzun bir pozisyonu kapatmak için yapabilir. Bunu yapmasını nasıl sağlarım? Demek istediğim, tüm bu diğer kapatma seçenekleriyle, tüm bu diğer kapatma seçeneklerinin yerini alacak yeni kodu nereye koyacağım?

Süremin sona ermesinde, bunun bazı yönlerini kullanmak istemediğimde, bu parametrenin kriterlerini o kadar aşırı yapıyorum ki, asla tetiklemeyecek, bu da bu kriterleri temelde kapatmak gibi. Bunu yapmak, diğer kriterlerin ne döndüreceklerini göstermesine izin verir.

 
elihayun:
bunu unuttum
void CloseOrder(int ticket,double numLots,double close_price)

{

int CloseCnt, err;

// try to close 3 Times

CloseCnt = 0;

color clr = Violet;

if (OrderType() == OP_SELL)

clr = Orange;

while (CloseCnt < 3)

{

if (OrderClose(ticket,numLots,close_price,Slippage,clr))

{

CloseCnt = 3;

}

else

{

err=GetLastError();

Print(CloseCnt," Error closing order : (", err , ") " + ErrorDescription(err));

if (err > 0) CloseCnt++;

}

}

}

[/PHP]

and dont forget to add this line after #property link

[PHP]#property link "http://www.elihayun.com"

#include

tamam harika teşekkürler!

yani bu temelde sadece bir kapanış kodu mu?

Bu hem açık hem de kısa pozisyonları kapatacak mı?

Longema minör trend belirleyiciye geri dönerse, bunu kapatmak için nasıl kullanırım? kısa açılmışsa yukarı, uzun açılmışsa aşağı mı?

ps Bu öğleden sonraya kadar bilgisayara dönmeyeceğim. O zaman tekrar kontrol edeceğim.

 

Bir soru daha...

"takas" ne demek

 

UZUN bir pozisyon çağrısı açmaya her karar verdiğinizde : CloseOrders(OP_SELL);

ve tam tersi.

Siparişleri açtığınız kodunuza bakın.

Kapatmak için bir emir olup olmadığını kontrol etmenize gerek yok. Rutin bunu senin için yapacak

BTW, 2006.07.02 tür hücresini Excel'de tarihe dönüştürmek için bir kod gönderiyorum. oradaki mesajına bak

Neden: