Nasıl kodlanır? - sayfa 163

 

iCCI Sorusu

MQL4'te yeniyim ve önceki CCI değerini almaya çalışıyorum. 1 Shift değeriyle iCCI işlevini kullanmayı denedim, ancak bana önceki değeri vermiyor. Geçerli değeri bir değişkene kaydetmeden bunu nasıl yapardım? CCİ'nin gittiği yönü belirlemeye çalışıyorum.

Yardımın için teşekkürler.

 

Kod kene tabanlıdır, bu nedenle o sırada kene yoksa kod zaman kontrolünü kaçıracaktır. Sürekli çalışan bir tür döngü olmadan tam saniyeye ulaşabileceğinizi sanmıyorum.

 

EA Düzenleme ile Yardım

Bunu anlamaya çalışıyorum... Lütfen yardım eder misiniz?

MB Trading - Hisse Senedi Opsiyon Vadeli İşlemleri Forex Online İndirimli Ticaret

Bunu değiştirdim:

OrderSend(Symbol(),OP_SELL,mylotsi, SellPrice,slippage,sl,tp,"MyMEFx EA"+MagicNumber,MagicNumber,0,Arrow sColor);

dönüş(0);

İle:

int bilet = OrderSend(Symbol(),OP_SELL,mylotsi, SellPrice,slippage,0,0,"MyMEFx EA"+MagicNumber,MagicNumber,0,Arrow sColor);

Uyku(1500);

OrderModify(ticket,OrderOpenPrice() ,sl,tp,0,ArrowsColor);

=========================================

Bu hataları alıyorum:

2009.02.28 17:32:59 2009.01.01 20:42 EATest AUDJPY,H1: OrderModify işlevi için geçersiz bilet

2009.02.28 17:32:59 2009.01.01 20:42 EATest AUDJPY,H1: OrderSend hatası 131

2009.02.28 17:32:59 2009.01.01 20:42 EATest AUDJPY,H1: OrderModify hatası 4051

=====================

 
coach3131:
Bunu çözmeye çalışıyorum... Lütfen yardım eder misiniz?

MB Trading - Hisse Senedi Opsiyon Vadeli İşlemleri Forex Online İndirimli Ticaret

Bunu değiştirdim:

OrderSend(Symbol(),OP_SELL,mylotsi, SellPrice,slippage,sl,tp,"MyMEFx EA"+MagicNumber,MagicNumber,0,Arrow sColor);

dönüş(0);

İle:

int bilet = OrderSend(Symbol(),OP_SELL,mylotsi, SellPrice,slippage,0,0,"MyMEFx EA"+MagicNumber,MagicNumber,0,Arrow sColor);

Uyku(1500);

OrderModify(ticket,OrderOpenPrice() ,sl,tp,0,ArrowsColor);

=========================================

Bu hataları alıyorum:

2009.02.28 17:32:59 2009.01.01 20:42 EATest AUDJPY,H1: OrderModify işlevi için geçersiz bilet

2009.02.28 17:32:59 2009.01.01 20:42 EATest AUDJPY,H1: OrderSend hatası 131

2009.02.28 17:32:59 2009.01.01 20:42 EATest AUDJPY,H1: OrderModify hatası 4051

=====================

Sorununuz sipariş gönderim deyiminizdeki parti büyüklüğünüz (hacim) ile ilgilidir. hata nedeniyle -1 döndürür. doğrulanabilir bilet bir bilet numarası içermez, ordermodify işleviyle diğer hataları tetikleyen -1 hata bayrağını içerir. Kabul edilebilir bir değer içermesi için parti büyüklüğü değişkeni mylotsi'yi düzeltmelisiniz. ikinci olarak ordermodify rutinini çağırmadan önce bunun bir hata bayrağı içermediğini görmek için bilet değişkenindeki dönüş değerini kontrol etmelisiniz.

keit

 

EA Maksimum Konum

herhangi biri bu EA için maksimum konum ekleyebilir mi

veya sadece bir pozisyonda çalışmasına izin mi vereceksiniz?

şimdiden teşekkürler

 

kullansan iyi olur

MathAbs(NormalizeDouble(Teklif,4)-NormalizeDouble(pivot,4))<Delta*Nokta,

Delta=2...5

 
jdun:
Birisi bana stoploss ve tp kodunu söyleyebilir mi? Bunu bu EA'ya eklemem gerekiyor.

bu gizli SL ve TP

int TakeProfit=20; // 20 pips take profit

int StopLoss =40; // 40 pips stoploss

int Slippage = 3;

int MagicNumber=1;

int i;

int start(){

//----- exit @ TP

if((ScanTrades()>=1)&& (ProfitInPips()>=TakeProfit)){

//----- This part will close all open orders and delete pending trades

for(i = OrdersTotal()-1; i >=0; i--)

{ OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if (OrderSymbol() == Symbol()&& OrderMagicNumber()==MagicNumber )

{

if (OrderType()==OP_BUY)OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Plum);

if (OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Plum);

if (OrderType() == OP_SELLLIMIT) OrderDelete(OrderTicket());

if (OrderType() == OP_BUYLIMIT) OrderDelete(OrderTicket());

if (OrderType() == OP_BUYSTOP) OrderDelete(OrderTicket());

if (OrderType() == OP_SELLSTOP) OrderDelete(OrderTicket());

}

}

}

//------exit @ SL

if((ScanTrades()>=1)&& (ProfitInPips()<= -StopLoss)){

//----- This part will close all open orders and delete pending trades

for(i = OrdersTotal()-1; i >=0; i--)

{ OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if (OrderSymbol() == Symbol()&& OrderMagicNumber()==MagicNumber )

{

if (OrderType()==OP_BUY)OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Plum);

if (OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Plum);

if (OrderType() == OP_SELLLIMIT) OrderDelete(OrderTicket());

if (OrderType() == OP_BUYLIMIT) OrderDelete(OrderTicket());

if (OrderType() == OP_BUYSTOP) OrderDelete(OrderTicket());

if (OrderType() == OP_SELLSTOP) OrderDelete(OrderTicket());

}

}

}

return (0);

}

//----------- Call functions

int ScanTrades()

{

int Tot = OrdersTotal();

int Numb = 0;

for(int cnt=0; cnt<=Tot-1; cnt++)

{

OrderSelect(cnt, SELECT_BY_POS);

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) Numb++;

}

return(Numb);

}

double ProfitInPips()

{

RefreshRates();

double Prof=0;

int i;

int totalOrders=OrdersTotal();

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

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;

if(OrderMagicNumber()==MagicNumber)

{

if(OrderType()==0)

{

Prof+=(MarketInfo(OrderSymbol(),MODE_BID)-OrderOpenPrice())/MarketInfo(OrderSymbol(),MODE_POINT);

}

if(OrderType()==1)

{

Prof+=(OrderOpenPrice()-MarketInfo(OrderSymbol(),MODE_ASK))/MarketInfo(OrderSymbol(),MODE_POINT);

}

}

}

return(Prof);

}

 

Diyelim ki birkaç Alış ve Satış emrim var

Yapmak istediğim şey:

- Açık işlemlerin başabaş fiyatından 5 pip daha fazla olan tüm işlemlerden "Sepet" çıkın

İlk for döngüsünde yapmaya çalıştığım şey, açık işlemlerin + takasın değerini bulmak ve onu pip'e dönüştürmek ve bu benim takıldığım kısım.

Birkaç fikir denedim ama çıkmaza girdim, sorunun ilk for ifadesinde olduğunu biliyorum ama çözemiyorum, herhangi bir yardım çok uygun

SymbolPL = 0;

OrdLots = 0;

Equity = 0;

MinPro = 5;

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

{OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)

{if(OrderType() == OP_BUY) OrdLots += OrderLots();

if(OrderType() == OP_SELL) OrdLots -= OrderLots();

Equity += OrderProfit() + OrderSwap();

}

}

MinPro= MathRound (MathAbs(Equity /OrdLots)+MinPro);

//--- Count the open trades

int i;

int count=0;

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

{ if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;

if(OrderMagicNumber()==MagicNumber && OrderType()<2)

{ count++;

}

}

//--- find the profit in pips of the open trades

RefreshRates();

double profits=0,openPrice=0,points=0;

string sym="";

int i;

int totalOrders=OrdersTotal();

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

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;

if(OrderMagicNumber()==MagicNumber)

{

sym=OrderSymbol();

openPrice=OrderOpenPrice();

if(OrderType()==0)

{

profits+=(MarketInfo(sym,MODE_BID)-openPrice)/MarketInfo(sym,MODE_POINT);

}

if(OrderType()==1)

{

profits+=(OrderOpenPrice()-MarketInfo(sym,MODE_ASK))/MarketInfo(sym,MODE_POINT);

}

}

}

//--- Close when the open trades are 5 pips more than the breakeven price

if (count>1 && profits>MinPro )

{

for(i = OrdersTotal()-1; i >=0; i--)

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if (OrderSymbol() == Symbol()&& OrderMagicNumber()==MagicNumber )

{

OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slippage,Plum);

}

}

}

 

Şu şekilde hesaplanacak bir "equity_per_lotpoint" sabiti kullanabileceğinizi düşünüyorum:

double equity_per_lotpoint = MarketInfo( Symbol(), MODE_TICKVALUE ) / MarketInfo( Symbol(), MODE_TICKSIZE );

[/PHP]

and then you'd have what you need after the first loop, with:

[PHP]if ( Equity > 5 * equity_per_lotpoint * MathAbs( OrdLots ) ) { ...

 

Teşekkürler Ralph ama takası kaçıracaktım ve takas karını/zararını sipariş kararının kapanışına dahil etmek istiyorum

Neden: