QQEA göstergesine dayalı bir Uzman Danışman yazıyorum. Genel olarak, danışmanın fikri şudur: kırmızı çizgi sarı olanı aşağıdan yukarıya kestiğinde, bir Buy emri açılmalıdır, kırmızı olan sarı olanı yukarıdan aşağıya geçtiğinde - bir sipariş satılık. Ama sadece bir sipariş açamam. Koşul karşılandığında siparişler açılır. Evet ve sadece satın alma siparişleri CHAYDNT'den mi kopuyor?!
//
danışman kodu
//--- input parametersexterndouble MaxRisk= 1.0 ;
externdouble FixLot = 0.01 ;
externdouble Exponent= 2.0 ;
externint Magic = 888 ;
// костылиexternint TakeProfit= 100 ;
externint StopLoss= 100 ;
int init()
return ( 0 );
}
int deinit()
{
//----//----return ( 0 );
}
int start()
{
//----int Count= 0 ;
double b0,b1;
int ticket;
// параметры индикатораint SF = 5 ; // original 5int RSI_Period = 14 ; // original 14double DARFACTOR = 4.236 ; //original 4.236//------------ Параметры из индикатора QQEA -----------------------// Buffer0 -- красная жирнаяstring Buffer0 = iCustom ( NULL , 0 , "QQEA" , SF, RSI_Period, DARFACTOR, 0 , 0 );
// Buffer1 -- жёлтый пунктирstring Buffer1 = iCustom ( NULL , 0 , "QQEA" , SF, RSI_Period, DARFACTOR, 1 , 0 );
b0= StrToDouble (Buffer0);
b1= StrToDouble (Buffer1);
double Lot=GetLot(MaxRisk);
// если лот <0 выводим сообщение об ошибкеif (Lot== 0 )
{
Alert ( "Недостаточно средств!" );
return ( 0 );
}
if (Lot!= 0 && b0>b1) // если лот <> 0 и красная выше жёлтой
{
ticket=NewOrder(OP_BUY,Lot);
if (ExistOrders( Symbol (), 1 , 888 , 0 ) == true ) // проверяем наличие ордера sell
{
CloseOrder();
}
}
if (Lot!= 0 && b0<b1) // если лот <> 0 и красная выше жёлтой
{
ticket=NewOrder(OP_SELL,Lot);
if (ExistOrders( Symbol (), 0 , 888 , 0 ) == true ) // проверяем наличие ордера buy
{
CloseOrder();
}
}
Comment ( "Red line: " ,b0, "Yellow line: " ,b1);
return ( 0 );
}
//-------------------------------------------------------------//расчёт лотаdouble GetLot( int Risk)
{ double Free = AccountFreeMargin ();
double One_Lot = MarketInfo ( Symbol (),MODE_MARGINREQUIRED);
double Min_Lot = MarketInfo ( Symbol (),MODE_MINLOT);
double Max_Lot = MarketInfo ( Symbol (),MODE_MAXLOT);
double Step = MarketInfo ( Symbol (),MODE_LOTSTEP);
double Lot = MathFloor (Free*Risk/ 100 /One_Lot/Step)*Step;
if (Lot<Min_Lot) Lot=Min_Lot;
if (Lot>Max_Lot) Lot=Max_Lot;
if (Lot*One_Lot>Free) return ( 0.0 );
return (Lot);}
bool ExistOrders( string sy= "" , int op=- 1 , int Magic=- 1 , datetime ot= 0 )
{
int i, k= OrdersTotal (), ty;
if (sy== "0" ) sy= Symbol ();
for (i= 0 ; i<k; i++) {
if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
ty= OrderType ();
if (ty> 1 && ty< 6 ) {
if (( OrderSymbol ()==sy || sy== "" ) && (op< 0 || ty==op)) {
if (Magic< 0 || OrderMagicNumber ()==Magic) {
if (ot<= OrderOpenTime ()) return (True);
}
}
}
}
}
return (False);
}
//открытие нового ордераint NewOrder( int Cmd, double Lot)
{ double TP= 0 ; //тейкпрофитdouble SL= 0 ; //стоплоссdouble PR= 0 ; //Ценаwhile (! IsTradeAllowed ()) Sleep ( 100 );
if (Cmd==OP_BUY)
{PR=Ask;
if (TakeProfit> 0 ) TP=Ask+TakeProfit* Point ;
if (StopLoss> 0 ) SL=Ask-StopLoss* Point ;}
if (Cmd==OP_SELL)
{PR=Bid;
if (TakeProfit> 0 ) TP=Bid-TakeProfit* Point ;
if (StopLoss> 0 ) SL=Bid+StopLoss* Point ;}
int tic= OrderSend ( Symbol (),Cmd,Lot,PR, 3 ,SL,TP, " " , 0 , 0 , Green );
if (tic< 0 ) Print ( "Ошибка открытия ордера: " , GetLastError ());
return (tic);}
// закрытие ордераvoid CloseOrder()
{ double PR= 0 ;
while (! IsTradeAllowed ()) Sleep ( 100 );
if ( OrderType ()==OP_BUY) PR=Bid;
if ( OrderType ()==OP_SELL) PR=Ask;
if (! OrderClose ( OrderTicket (), OrderLots (),PR, 3 , Red ))
Print ( "Ошибка закрытия ордера: " , GetLastError ());
return ;}
QQEA göstergesine dayalı bir Uzman Danışman yazıyorum. Genel olarak, danışmanın fikri şudur: kırmızı çizgi sarı olanı aşağıdan yukarıya kestiğinde, bir Buy emri açılmalıdır, kırmızı olan sarı olanı yukarıdan aşağıya geçtiğinde - bir sipariş satılık. Ama sadece bir sipariş açamam. Koşul karşılandığında siparişler açılır. Evet ve sadece satın alma siparişleri CHAYDNT'den mi kopuyor?!
//
danışman kodu
//--- input parametersexterndouble MaxRisk= 1.0 ;
externdouble FixLot = 0.01 ;
externdouble Exponent= 2.0 ;
externint Magic= 888 ;
// костылиexternint TakeProfit= 100 ;
externint StopLoss= 100 ;
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+int init()
{
return ( 0 );
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+int deinit()
{
//----//----return ( 0 );
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+int start()
{
//----int Count= 0 ;
double b0,b1;
int ticket;
// параметры индикатораint SF= 5 ; // original 5int RSI_Period= 14 ; // original 14double DARFACTOR= 4.236 ; //original 4.236//------------ Параметры из индикатора QQEA -----------------------// Buffer0 -- красная жирнаяstring Buffer0= iCustom ( NULL , 0 , "QQEA" ,SF,RSI_Period,DARFACTOR, 0 , 0 );
// Buffer1 -- жёлтый пунктирstring Buffer1= iCustom ( NULL , 0 , "QQEA" ,SF,RSI_Period,DARFACTOR, 1 , 0 );
b0= StrToDouble (Buffer0);
b1= StrToDouble (Buffer1);
double Lot=GetLot(MaxRisk);
// если лот <0 выводим сообщение об ошибкеif (Lot== 0 )
{
Alert ( "Недостаточно средств!" );
return ( 0 );
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+if (Lot!= 0 && b0>b1) // если лот <> 0 и красная выше жёлтой
{
ticket=NewOrder(OP_BUY,Lot);
if (ExistOrders( Symbol (), 1 , 888 , 0 )==true) // проверяем наличие ордера sell
{
CloseOrder();
}
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+if (Lot!= 0 && b0<b1) // если лот <> 0 и красная выше жёлтой
{
ticket=NewOrder(OP_SELL,Lot);
if (ExistOrders( Symbol (), 0 , 888 , 0 )==true) // проверяем наличие ордера buy
{
CloseOrder();
}
}
Comment ( "Red line: " ,b0, "Yellow line: " ,b1);
return ( 0 );
}
//-------------------------------------------------------------//расчёт лотаdouble GetLot( int Risk)
{
double Free= AccountFreeMargin ();
double One_Lot = MarketInfo ( Symbol (),MODE_MARGINREQUIRED);
double Min_Lot = MarketInfo ( Symbol (),MODE_MINLOT);
double Max_Lot = MarketInfo ( Symbol (),MODE_MAXLOT);
double Step= MarketInfo ( Symbol (),MODE_LOTSTEP);
double Lot = MathFloor (Free*Risk/ 100 /One_Lot/Step)*Step;
if (Lot<Min_Lot) Lot=Min_Lot;
if (Lot>Max_Lot) Lot=Max_Lot;
if (Lot*One_Lot>Free) return ( 0.0 );
return (Lot);
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+bool ExistOrders( string sy= "" , int op=- 1 , int Magic=- 1 , datetime ot= 0 )
{
int i,k= OrdersTotal (),ty;
if (sy== "0" ) sy= Symbol ();
for (i= 0 ; i<k; i++)
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+
{
if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))
{
ty= OrderType ();
if (ty> 1 && ty< 6 )
{
if (( OrderSymbol ()==sy || sy== "" ) && (op< 0 || ty==op))
{
if (Magic< 0 || OrderMagicNumber ()==Magic)
{
if (ot<= OrderOpenTime ()) return (True);
}
}
}
}
}
return (False);
}
//открытие нового ордераint NewOrder( int Cmd, double Lot)
{
double TP= 0 ; //тейкпрофитdouble SL= 0 ; //стоплоссdouble PR= 0 ; //Ценаwhile (! IsTradeAllowed ()) Sleep ( 100 );
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+if (Cmd==OP_BUY)
{
PR=Ask;
if (TakeProfit> 0 ) TP=Ask+TakeProfit* Point ;
if (StopLoss> 0 ) SL=Ask-StopLoss* Point ;
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+if (Cmd==OP_SELL)
{
PR=Bid;
if (TakeProfit> 0 ) TP=Bid-TakeProfit* Point ;
if (StopLoss> 0 ) SL=Bid+StopLoss* Point ;
}
if (GetOrdersCount(Magic,Cmd)> 0 ) return ( 0 );
int tic= OrderSend ( Symbol (),Cmd,Lot,PR, 3 ,SL,TP, " " , 0 , 0 , Green );
if (tic< 0 ) Print ( "Ошибка открытия ордера: " , GetLastError ());
return (tic);
}
// закрытие ордераvoid CloseOrder()
{
double PR= 0 ;
while (! IsTradeAllowed ()) Sleep ( 100 );
if ( OrderType ()==OP_BUY) PR=Bid;
if ( OrderType ()==OP_SELL) PR=Ask;
if (! OrderClose ( OrderTicket (), OrderLots (),PR, 3 , Red ))
Print ( "Ошибка закрытия ордера: " , GetLastError ());
return ;
}
//+------------------------------------------------------------------+// подсчет кол-ва открытых позицийint GetOrdersCount( int MagicNumber, int Type)
{
int count= 0 ;
for ( int i= 0 ; i< OrdersTotal (); i++)
{
// already closedif ( OrderSelect (i,SELECT_BY_POS)==false) continue ;
// not current symbolif ( OrderSymbol ()!= Symbol ()) continue ;
// order was opened in another wayif ( OrderMagicNumber ()!=MagicNumber) continue ;
if ( OrderType ()==Type)
{
count++;
}
}
return (count);
}
//-------------------------------------------------------
Daha okunaklı yazın, daha sonra daha kolay olacaktır.
QQEA göstergesine dayalı bir Uzman Danışman yazıyorum. Genel olarak, danışmanın fikri şudur: kırmızı çizgi sarı olanı aşağıdan yukarıya kestiğinde, bir Buy emri açılmalıdır, kırmızı olan sarı olanı yukarıdan aşağıya geçtiğinde - bir sipariş satılık. Ama sadece bir sipariş açamam. Koşul karşılandığında siparişler açılır. Evet ve sadece satın alma siparişleri CHAYDNT'den mi kopuyor?!
arkadaşlar, danışman iki farklı zaman dilimi kullanır (30 ve 60), bana danışmanı test etmemi söyle, test cihazında hangi süreyi ayarlayacağım? ve EA'daki dönem testi değiştirmez mi???
Dizilerle ilgili yardım. İstediğim gibi çalışmıyor.
p[] bir fiyat dizisi var. Bir eleman daha az uzunlukta olacak yeni bir dizi oluşturmak gerekir ve ilk diziden iki bitişik elemanın farkı olarak hesaplanır. Fark negatifse, -1 ile çarpın.
Dizilerle ilgili yardım. İstediğim gibi çalışmıyor.
p[] bir fiyat dizisi var. Bir eleman daha az uzunlukta olacak yeni bir dizi oluşturmak gerekir ve ilk diziden iki bitişik elemanın farkı olarak hesaplanır. Fark negatifse, -1 ile çarpın.
QQEA göstergesine dayalı bir Uzman Danışman yazıyorum. Genel olarak, danışmanın fikri şudur: kırmızı çizgi sarı olanı aşağıdan yukarıya kestiğinde, bir Buy emri açılmalıdır, kırmızı olan sarı olanı yukarıdan aşağıya geçtiğinde - bir sipariş satılık. Ama sadece bir sipariş açamam. Koşul karşılandığında siparişler açılır. Evet ve sadece satın alma siparişleri CHAYDNT'den mi kopuyor?!
danışman kodu
QQEA göstergesine dayalı bir Uzman Danışman yazıyorum. Genel olarak, danışmanın fikri şudur: kırmızı çizgi sarı olanı aşağıdan yukarıya kestiğinde, bir Buy emri açılmalıdır, kırmızı olan sarı olanı yukarıdan aşağıya geçtiğinde - bir sipariş satılık. Ama sadece bir sipariş açamam. Koşul karşılandığında siparişler açılır. Evet ve sadece satın alma siparişleri CHAYDNT'den mi kopuyor?!
//
danışman kodu
QQEA göstergesine dayalı bir Uzman Danışman yazıyorum. Genel olarak, danışmanın fikri şudur: kırmızı çizgi sarı olanı aşağıdan yukarıya kestiğinde, bir Buy emri açılmalıdır, kırmızı olan sarı olanı yukarıdan aşağıya geçtiğinde - bir sipariş satılık. Ama sadece bir sipariş açamam. Koşul karşılandığında siparişler açılır. Evet ve sadece satın alma siparişleri CHAYDNT'den mi kopuyor?!
//
danışman kodu
sormama izin ver
Dize türü neden kullanılır?
arkadaşlar, danışman iki farklı zaman dilimi kullanır (30 ve 60), bana danışmanı test etmemi söyle, test cihazında hangi süreyi ayarlayacağım? ve EA'daki dönem testi değiştirmez mi???
Bu günlük girişleri ne anlama geliyor:
2012.01.31 14:34:45 Bellek işleyici: 10436536 bayt bellek ayıramıyor
2012.01.31 14:34:45 HistoryBase: yeterli bellek 'EURGBP1' [206996 bar]
? Herhangi bir sorun varsa düzeltmek mümkün mü?
Dizilerle ilgili yardım. İstediğim gibi çalışmıyor.
p[] bir fiyat dizisi var. Bir eleman daha az uzunlukta olacak yeni bir dizi oluşturmak gerekir ve ilk diziden iki bitişik elemanın farkı olarak hesaplanır. Fark negatifse, -1 ile çarpın.
p[6]={1, 5, 9, 4, 6, 2, 3}
almalı
p_diff[5] = {-1*(1-5), -1*(5-9), 9-4, -1*(4-6), 6-2, -1*(2-3)} onlar. p_diff[5] = {4, 4, 5, 2, 4, 1}
Bu günlük girişleri ne anlama geliyor:
2012.01.31 14:34:45 Bellek işleyici: 10436536 bayt bellek ayıramıyor
2012.01.31 14:34:45 HistoryBase: yeterli bellek 'EURGBP1' [206996 bar]
? Herhangi bir sorun varsa düzeltmek mümkün mü?
Dizilerle ilgili yardım. İstediğim gibi çalışmıyor.
p[] bir fiyat dizisi var. Bir eleman daha az uzunlukta olacak yeni bir dizi oluşturmak gerekir ve ilk diziden iki bitişik elemanın farkı olarak hesaplanır. Fark negatifse, -1 ile çarpın.
p[6]={1, 5, 9, 4, 6, 2, 3}
almalı
p_diff[5] = {-1*(1-5), -1*(5-9), 9-4, -1*(4-6), 6-2, -1*(2-3)} onlar. p_diff[5] = {4, 4, 5, 2, 4, 1}
İşlev, kendisine iletilen sayının mutlak değerini (modulo değeri) döndürür.