Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 539

 
tatianati :

Teşekkür ederim! Anlaşılan çocuk gibi mutluydum ama danışman "yenilerini" koymayı bıraktı. Söyle bana, nerede hata yaptın?

Huh, bir hata buldum, orijinal olarak baktığım yerde değil. Bir sonraki görevi kendi başınıza halledemezsiniz.

Bana sapma aralığını nasıl ayarlayacağımı söyle - MA'dan fiyatın kaldırılması.

 extern string s10                = ">>>>>>>>>>>>>>>>>>>>>>>>>>>>" ;
extern string s11                = ">>> Вход против МА" ;
extern int     iMA_Period         = 365 ;
extern int     iMA_OpenDistance   = 60 ;     // как задать диапазон? например 60-85 за его пределами не открывать ордеров

İşte giriş kısmı

 int GetSignal()
{
   int Signal = 0 ;

   double iMA_Signal = iMA ( Symbol (), 0 , iMA_Period, 0 , MODE_SMMA , PRICE_CLOSE , 0 );
  
   int Ma_Bid_Diff = MathAbs (iMA_Signal - Bid )/vPoint;
  
   if (Ma_Bid_Diff > iMA_OpenDistance && Bid > iMA_Signal) Signal = - 1 ;
   if (Ma_Bid_Diff > iMA_OpenDistance && Bid < iMA_Signal) Signal = 1 ;
  
   return (Signal);
}
 
tatianati :

Huh, bir hata buldum, orijinal olarak baktığım yerde değil. Bir sonraki görevi kendi başınıza halledemezsiniz.

Bana sapma aralığını nasıl ayarlayacağımı söyle - MA'dan fiyatın kaldırılması.

İşte giriş kısmı


 extern int     Min_iMA_OpenDistance   = 60 ;
extern int     Max_iMA_OpenDistance   = 85 ;

Ve buna göre, koşul

 if (Ma_Bid_Diff > Min_iMA_OpenDistance && Ma_Bid_Diff < Max_iMA_OpenDistance && Bid > iMA_Signal)
 

Danışmandaki ilk verileri doğru bir şekilde (1 alış, -1 satış) olarak değiştirmeniz gerekir.

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

//| SimpleBars_rob.mq4 |
//| Copyright © 2010, ENSED Ekibi |
//| http://www.ensed.org |
//+------------------------------------------- --------------------+
#property telif hakkı "Telif hakkı © 2010, ENSED Ekibi"
#özellik bağlantısı "http://www.ensed.org"

extern int SL = 50, // zararı durdur değeri (puan olarak)
TP=150; // kar değerini al (puan olarak)
harici çift Lot = 0.1; // çalışma partisi (mikro lot - 0.01, mini lot - 0.1, normal lot - 1.0)
harici string Order_Comment = "robot"; // siparişlerle birlikte verilen yorum
extern int Kayma = 5; // izin verilen maksimum kayma seviyesi (puan olarak)
harici int Magic_Number = 777; // sihirli sayı - robot için siparişler ("kendi" anlaşmalarını ayırt etmek için)
harici bool Play_Sound = yanlış; // açılışta ses çal: true - izin verildi, false - devre dışı

//------------------------------------------------ -------------------------------------------------- ------------------+
//+ SimpleBars göstergesinin zaman çerçevelerini ve parametrelerini ayarlama |
dış int nokta = 6;
extern bool useClose = true;
dış int genişlik = 3;
//+ SimpleBars göstergesinin zaman çerçevelerini ve parametrelerini ayarlama |
//------------------------------------------------ -------------------------------------------------- ------------------+

//+------------------------------------------- -------------------------------------------------- ------------------+
//+ sondaki durdurma |
extern bool UseTrailing = true; // takip eden durdurmayı etkinleştir/devre dışı bırak
extern int TrailingStop = 50; // sabit sondaki durma boyutu (puan olarak)
extern int TrailingStep = 1; // sondaki durdurma adımı (nokta olarak)
//+ sondaki durdurma |
//+------------------------------------------- -------------------------------------------------- ------------------+

//+------------------------------------------- -------------------------------------------------- ------------------+
//| işlev. program başlatıldığında yürütülür |
geçersiz init() {
if(GlobalVariableCheck("this_bar"+Symbol()+Period()))
GlobalVariableDel("this_bar"+Symbol()+Period());
dönüş;
}
//| işlev. program başlatıldığında yürütülür |
//+------------------------------------------- -------------------------------------------------- ------------------+

//+------------------------------------------- -------------------------------------------------- ------------------+
//| işlev. program başlatmama sırasında yürütülür |
geçersiz tanım() {
if(GlobalVariableCheck("this_bar"+Symbol()+Period()))
GlobalVariableDel("this_bar"+Symbol()+Period());
dönüş;
}
//| işlev. program başlatmama sırasında yürütülür |
//+------------------------------------------- -------------------------------------------------- ------------------+

//+------------------------------------------- -------------------------------------------------- ------------------+
//| ticaret sinyali arama fonksiyonu |
int fsinyaller() {
çift sinyal = iCustom(NULL, 0, "SimpleBars", nokta, 0, 1, 4, 0);
dönüş(0); // bir satın alma açmak için sinyal
dönüş(1); // bir satış açmak için sinyal
dönüş(-1); // sinyal yok
} // int fsinyalleri sonlandır()
//| ticaret sinyali arama fonksiyonu |
//+------------------------------------------- -------------------------------------------------- ------------------+

//+------------------------------------------- -------------------------------------------------- ------------------+
//| robotun bu çubukta çalıştığı gerçeğini izlemek için işlev |
bool this_bar() {
Eğer(
(!GlobalVariableCheck("this_bar"+Symbol()+Period()))
|| (GlobalVariableGet("this_bar"+Symbol()+Period())!=Zaman[0])
) {
GlobalVariableSet("this_bar"+Symbol()+Period(),Time[0]);
dönüş(yanlış);
} başka {
dönüş(doğru);
} //eğer if (.. (!GlobalVariableCheck("this_bar"+Symbol()+Period())) biter
} // bool sonu this_bar()
//| robotun bu çubukta çalıştığı gerçeğini izlemek için işlev |
//+------------------------------------------- -------------------------------------------------- ------------------+

//+------------------------------------------- -------------------------------------------------- ------------------+
//| bu tür siparişler için arama fonksiyonu |
bool find_orders(int magic=-1, int type=-1, string symb="NULL") {
/*, verilen sembol için verilen sihirli sayı ile bu türden en az bir sıra bulunursa true değerini döndürür */
for (int i=OrdersTotal()-1; i>=0; i--) {
if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) ara;
if(((OrderType()==type) || (type==-1))
&& ((OrderMagicNumber()==sihir) || (sihir==-1))
&& ((OrderSymbol()==Symbol() || (symb=="YOK")))) {
// sıra bulunursa, true değerini döndürün ve döngüden çıkın
dönüş(doğru);
kırmak;
} //end if((OrderType()==type) && (OrderMagicNumber()==magic) && (OrderSymbol()==Symbol()))
} //end for (int i2=Sipariş Toplamı()-1; i2>=0; i2--)

dönüş(yanlış); // yanlış döndür
} // bitiş bool bul_sıraları(int büyü, int türü)
//| bu tür siparişler için arama fonksiyonu |
//+------------------------------------------- -------------------------------------------------- ------------------+

//+------------------------------------------- -------------------------------------------------- ------------------+
//| siparişler için Zarar Durdur değerini hesaplama işlevi |
double sl(int sl_value, int type, double fiyat=0.0, string symb="YOK", int rmode=1) {
//type=0 -> pazar alımları
//type=1 -> pazar satışları
if(symb=="YOK") symb=Symbol();
if(type==0) fiyat=NormalizeDouble(MarketInfo(symb,MODE_ASK),MarketInfo(symb,MODE_DIGITS));
if(type==1) fiyat=NormalizeDouble(MarketInfo(symb,MODE_BID),MarketInfo(symb,MODE_DIGITS));
if(sl_value<=0) return(0);
if(rmode==1) {
if((type==0) || (type==2) || (type==4)) return(MarketInfo(symb,MODE_ASK)-sl_value*MarketInfo(symb,MODE_POINT)); // satın almalar için
if((type==1) || (type==3) || (type==5)) return(MarketInfo(symb,MODE_BID)+sl_value*MarketInfo(symb,MODE_POINT)); //indirimde
}
if(rmode==2) {
if((type==0) || (type==2) || (type==4)) return(MarketInfo(symb,MODE_BID)-sl_value*MarketInfo(symb,MODE_POINT)); // satın almalar için
if((type==1) || (type==3) || (type==5)) return(MarketInfo(symb,MODE_ASK)+sl_value*MarketInfo(symb,MODE_POINT)); //indirimde
}
} // double sl'yi sonlandır(int sl_value, int tipi, double fiyat=0.0, string symb="YOK", int rmode=1)
//| siparişler için Zarar Durdur değerini hesaplama işlevi |
//+------------------------------------------- -------------------------------------------------- ------------------+

//+------------------------------------------- -------------------------------------------------- ------------------+
//| siparişler için Kar Al hesaplama fonksiyonu |
double tp(int tp_value, int type, double fiyat=0.0, string symb="YOK") {
//type=0 -> pazar alımları
//type=1 -> pazar satışları
if(symb=="YOK") symb=Symbol();
if(type==0) fiyat=NormalizeDouble(MarketInfo(symb,MODE_ASK),MarketInfo(symb,MODE_DIGITS));
if(type==1) fiyat=NormalizeDouble(MarketInfo(symb,MODE_BID),MarketInfo(symb,MODE_DIGITS));
if(tp_value<=0) return(0);
if((tip==0) || (tür==2) || (tür==4)) dönüş(fiyat+tp_değeri*MarketInfo(symb,MODE_POINT)); // satın almalar için
if((type==1) || (type==3) || (type==5)) return(MarketInfo(symb,MODE_BID)-tp_value*MarketInfo(symb,MODE_POINT)); //indirimde
} // double tp'yi sonlandır(int tp_value, int tipi, double fiyat=0.0, string symb="YOK")
//| siparişler için Kar Al hesaplama fonksiyonu |
//+------------------------------------------- -------------------------------------------------- ------------------+

//+------------------------------------------- -------------------------------------------------- ------------------+
//| sipariş açma işlevi |
void open_positions(int sinyal, çift lot, çift fiyat=0.0, string symb="YOK") {
//signal=0 -> bir satın alma açma sinyali
//signal=1 -> satış açma sinyali
/* extern */ int Count_Of_Trade_Try=5, Pause_Of_Trade_Try=5;

int ben = 0; // döngü sayacı için değişken
int hata = 0;

if(symb=="YOK") symb=Symbol();
if(sinyal==0)
fiyat=NormalizeDouble(MarketInfo(symb,MODE_ASK),MarketInfo(symb,MODE_DIGITS)); // alımlar için açık fiyat
if(sinyal==1)
fiyat=NormalizeDouble(MarketInfo(symb,MODE_BID),MarketInfo(symb,MODE_DIGITS)); // açılış fiyatını sat

while(i<=Count_Of_Trade_Try) {
//kendi kendini açan sipariş fonksiyonu (yerleşik). Algılama kolaylığı için parametreler farklı satırlara ayrılmıştır:
int bilet = OrderSend(Symbol(), //symbol)
sinyal, // sipariş tipi
çok, //hacim
fiyat, //açık fiyat
Kayma, // kabul edilebilir teklif seviyesi
sl(SL,sinyal), //Kaybı Durdur değeri
tp(TP,sinyal), //Kar Al değeri
Order_Comment, //sipariş yorumu
Magic_Number, //sihirli sayı
0, //son kullanma tarihi (bekleyen siparişler için kullanılır)
CLR_NONE); // grafikte görüntülenen okun rengi (CLR_NONE - ok çizilmez)
if(ticket!=-1) // eğer açılış başarılıysa, bir grafik nesnesi çizin ve döngüden çıkın
kırmak;
err=GetLastError();
if(err!=0) Print("Hata: "+Market_Err_To_Str(err));
ben++;
Uyku(Pause_Of_Trade_Try*1000); // hata durumunda tekrar denemeden önce duraklatın
} // while'ı sonlandır(i<=say)
} // end void open_positions(int sinyal, çift lot, çift fiyat=0.0, string symb="YOK")
//| sipariş açma işlevi |
//+------------------------------------------- -------------------------------------------------- ------------------+

//+------------------------------------------- -------------------------------------------------- ------+
//| hata kodu şifre çözme işlevi |
string Market_Err_To_Str(int hata) {
/* fonksiyon sadece ticari hata kodlarını kapsar */
geçiş(hata) {
case(0): return("Hata yok");
case(1): return("Hata yok ama sonuç bilinmiyor");
case(2): return("Genel hata");
case(3): return("Yanlış parametreler");
case(4): return("Ticaret sunucusu meşgul");
case(5): return("Müşteri terminalinin eski versiyonu");
case(6): return("Ticaret sunucusuna bağlantı yok");
case(7): return("Yetersiz haklar");
case(8): return("Talepler çok sık");
case(9): return("Sunucuyu bozan yasadışı işlem");
case(64): return("Hesap bloke edildi");
case(65): return("Yanlış hesap numarası");
case(128): return("Anlaşma zaman aşımı süresi doldu");
case(129): return("Yanlış fiyat");
case(130): return("Yanlış duraklar");
case(131): return("Yanlış hacim");
case(132): return("Piyasa kapandı");
case(133): return("Ticaret yasaktır");
case(134): return("İşlemi tamamlamak için yeterli para yok");
case(135): return("Fiyat değişti");
case(136): return("Fiyat yok");
case(137): return("Broker meşgul");
case(138): return("Yeni fiyatlar");
case(139): return("Sipariş bloke edildi ve halihazırda işleniyor");
case(140): return("Yalnızca satın almaya izin verilir");
case(141): return("Çok fazla istek");
case(145): return("Sipariş piyasaya çok yakın olduğu için değişiklik yapılması yasaktır");
case(146): return("Ticaret alt sistemi meşgul");
case(147): return("Komisyoncu tarafından son kullanma tarihinin kullanılması yasaktır");
case(148): return("Açık ve bekleyen emirlerin sayısı komisyoncu tarafından belirlenen limite ulaştı");
case(149): return("Hedging yasak ise, mevcut bir pozisyona zıt bir pozisyon açmaya çalışın");
case(150): return("FIFO kuralına aykırı olarak bir enstrümanda pozisyon kapatmaya teşebbüs");

varsayılan: dönüş("");
} // bitiş anahtarı(hata)
} //dizi sonu Err_To_Str(int hata)
//| hata kodu şifre çözme işlevi |
//+------------------------------------------- -------------------------------------------------- ------+

//+------------------------------------------- -------------------------------------------------- ------+
//| Kapanış işlemleri |
//+------------------------------------------- -------------------------------------------------- ---+
//| numarasına (bilet) göre bir siparişi kapatma işlevi |


bool close_by_ticket(int c_ticket, int kayma) {
/*
bir anlaşmayı numarasına (bilet) göre kapatma işlevi.
Bir piyasa emrini kapatırken, izin verilen maksimum kayma (kayma) seviyesi dikkate alınır.
*/
/* extern */ int Count_Of_Trade_Try=5, Pause_Of_Trade_Try=5;

int ben = 0; // döngü sayacı için değişken
int hata = 0;
bool bilet = yanlış; // anlaşmayı kapatmanın (un)başarısız olduğunu gösteren değişken
çift fiyat = 0.0; //kapanan anlaşmanın fiyatı (piyasa emirleri için)
if(OrderSelect(c_ticket,SELECT_BY_TICKET,MODE_TRADES)) { //bilete göre bir sipariş seçin
if(OrderType()==OP_BUY) fiyat = NormalizeDouble(Teklif,Rakamlar); // satın alma fiyatı
if(OrderType()==OP_SEL) fiyat = NormalizeDouble(Sor,Rakamlar); //satış fiyatı
for(i=0;i<=Count_Of_Trade_Try;i++) {
if(OrderType()<=1) //piyasa emriyse kapatın, bekliyorsa silin
bilet=OrderClose(OrderTicket(),OrderLots(),fiyat,kayma,CLR_NONE);
başka
bilet=OrderDelete(OrderTicket());

if(ticket) { //eğer kapatma veya silme başarılıysa, true döndür ve döngüden çık
dönüş(doğru);
kırmak;
} // if(bilet) sonlandır
err=GetLastError();
if(err!=0) Print("Hata: "+Market_Err_To_Str(err));
Uyku(Pause_Of_Trade_Try*1000); // hata durumunda tekrar denemeden önce duraklatın
} //end for(i=0;i<=Count_Of_Trade_Try;i++)
} //son if(OrderSelect(c_ticket,SELECT_BY_TICKET,MODE_TRADES))

dönüş(yanlış); // yanlış döndür
} // bitiş bool close_by_ticket(int c_ticket)
//| numarasına (bilet) göre bir siparişi kapatma işlevi |
//+------------------------------------------- -------------------------------------------------- ---+

bool cbm(int büyü, int kayma, int türü) {
/*
büyü ile kapat (verilen türdeki tüm siparişleri verilen MagicNumber ile kapatarak)
İzin verilen maksimum kayma dikkate alınır
close_by_ticket işlevi kullanılır.
*/
int n = 0;
while (find_orders(sihir, tür))
for (int i2=SiparişlerToplam()-1; i2>=0; i2--) {
if (!OrderSelect(i2,SELECT_BY_POS,MODE_TRADES)) kırılması;

if ((OrderType()==type) && (OrderMagicNumber()==sihir)) {
close_by_ticket(OrderTicket(), kayma);
n++;
} //son if (((OrderType()==OP_BUY) || (OrderType()==OP_SELL)) && (OrderMagicNumber()==magic))
} //end for (int i2=Sipariş Toplamı()-1; i2>=0; i2--)

if(n>0)
dönüş(doğru);

dönüş(yanlış);
} // bool sonu cbm(int büyü, int kayma, int türü)
//| Kapanış işlemleri |
//+------------------------------------------- -------------------------------------------------- ------+

//+------------------------------------------- -------------------------------------------------- ------------------+
//| takip eden durdurma kaybı |
geçersiz T_SL() {
if(!UseTrailing) dönüşü;
int ben = 0;
for(i=0; i<SiparişToplam(); i++) {
if(!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))) devam;
if(OrderSymbol() != Symbol() || OrderMagicNumber()!=Magic_Number) devam ediyor;

if(OrderType()==OP_BUY) {
if(NormalizeDouble(Bid-OrderOpenPrice(),Digits)>NormalizeDouble(TrailingStop*Point,Digits)) {
if(NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Teklif-(TrailingStop+TrailingStep-1)*Nokta,Rakamlar))
OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid-TrailingStop*Point,Digits), OrderTakeProfit(), 0, CLR_NONE);
} //end if(NormalizeDouble(Bid-OrderOpenPrice(),Digits)>NormalizeDouble(TrailingStop*Point,Digits))
} // if(OrderType()==OP_BUY) sonlandır

if(OrderType()==OP_SEL) {
if(NormalizeDouble(OrderOpenPrice()-Ask,Digits)>NormalizeDouble(TrailingStop*Point,Digits)) {
if(NormalizeDouble(OrderStopLoss(),Digits)>NormalizeDouble(Sor+(TrailingStop+TrailingStep-1)*Nokta,Rakamlar))
OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask+TrailingStop*Point,Digits), OrderTakeProfit(), 0, CLR_NONE);
} //son if(NormalizeDouble(OrderOpenPrice()-Ask,Digits)>NormalizeDouble(TrailingStop*Point,Digits))
} // if(OrderType()==OP_SELL) sonlandır
} //end for(i=0; i<OrdersTotal(); i++)
} // void'i sonlandır T_SL()
//| takip eden durdurma kaybı |
//+------------------------------------------- -------------------------------------------------- ------------------+

//+------------------------------------------- -------------------------------------------------- ------------------+
//| ana işlev |
geçersiz başlangıç() {

int işaret = fsinyaller();

if(!find_orders(Magic_Number)) {
if((sig!=-1)) {
if(!this_bar()) {
open_positions(sig, Lot);
if(Play_Sound)
PlaySound("alert.wav");
}
} // if((sig!=-1) && (!this_bar())) sonlandır
} başka {
if(sig==0) {
if(cbm(Magic_Number, Slipage, 1)) {
open_positions(sig, Lot);
if(Play_Sound)
PlaySound("alert.wav");
} // if(cbm(Magic_Number, Slipage, 1)) sonlandır
} // if(sig==0) sonlandır
if(sig==1) {
if(cbm(Magic_Number, Slippage, 0)) {
open_positions(sig, Lot);
if(Play_Sound)
PlaySound("alert.wav");
} // if(cbm(Magic_Number, Slipage, 0)) sonlandır
} // if(sig==1) sonlandır
TSL();
} // if(!find_orders(Magic_Number)) sonlandır (başka)
dönüş;
}
//| ana işlev |
//+------------------------------------------- -------------------------------------------------- ------------------+
 

Merhaba bilenler. Yardım - çalışmıyor. Sanırım değişkenlerin başlatılmasıyla kafam karıştı. Başım dönüyor, ama herhangi bir hata bulamıyorum.

EA, pozisyonları açmak yerine, Klose(0) fiyatında oklar çizmeli ve kapanış yerine - bir çarpı işareti koymalı ve verileri ( fExpiration_func(Expiration), fop_time, cl_time, fop_price, cl_price, ftype) yeni bir satıra yazdırmalıdır.

Burada stokastik sadece bir örnek olarak alınmıştır.

 //+------------------------------------------------------------------+
//|                                                     binar_v1.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"


//--- input Time parameters
input uchar     hs = 9 ; 
input uchar     ms = 0 ; 
input uchar     he = 18 ; 
input uchar     me = 0 ;
//--- input Indicator parameters

//--- input Expiration parameters
input uchar     Expiration = 2 ; //время експирации в минутах


input bool      strategy_1  =   true ;


bool poz;                                   //открытая/закрытая позиция
datetime op_time;                         //время открытия
double op_price;                           //цена открытия
char type;                                 //тип открытой позиции -1 СЕЛЛ, 1- БАИ
//+=================================================================================+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- 
   
      
//---
   return ( INIT_SUCCEEDED );
  }
//+=================================================================================+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//--- destroy timer
   
      
  }
//+=================================================================================+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
   //подщитаем арифметическое среднее OC за прошлую неделю
   //Пощет один раз в неделю    
     /* if(isNewBar("",PERIOD_W1)){      
         uchar iPr=iBarShift(NULL,PERIOD_M1,iTime(NULL,PERIOD_W1,1));
         uchar iPn=iBarShift(NULL,PERIOD_M1,iTime(NULL,PERIOD_W1,1))+10080;
         double avgM1=AvgOC(iPr,iPn,0);                                     // M1 OC цредняя за прошлую неделю               
      }*/
       if (!fisTradeTimeInt( 9 , 0 , 18 , 0 )) return ;                                 //Время торгов
       if (strategy_1== true )fStrategy1();
  }
//+=================================================================================+
//| Timer function                                                   |
//+------------------------------------------------------------------+

//+=================================================================================+
void fStrategy1
   (
   
   )
//--------------------   
{
   

   if (poz== true )                             //если есть открыта позиция
      fClose_Pos(op_time,op_price,type);       //закрываем
   if (poz== false ){                           //если нет открытой
      fOpen_buy(poz,op_time,op_price,type);   //покупка   
      fOpen_sell(poz,op_time,op_price,type);   //продажа
   }       
}
//+=================================================================================+
void fOpen_buy
   (
   bool & op,                                 //открытая/закрытая позиция
   datetime & out_op_time,                       //время открытия
   double & out_op_price,                         //цена открытия
   char & out_type                               //тип открытой позиции -1 СЕЛЛ, 1- БАИ
   )
//--------------------
{
   double stoch_M0_1 = iStochastic ( NULL , 0 , 5 , 3 , 3 , MODE_SMA , 0 , MODE_MAIN , 1 );
   double stoch_M0_2 = iStochastic ( NULL , 0 , 5 , 3 , 3 , MODE_SMA , 0 , MODE_MAIN , 2 );
   double stoch_M0_1s= iStochastic ( NULL , 0 , 5 , 3 , 3 , MODE_SMA , 0 , MODE_SIGNAL , 1 );
   double stoch_M0_2s= iStochastic ( NULL , 0 , 5 , 3 , 3 , MODE_SMA , 0 , MODE_SIGNAL , 2 );
   
   string arrowName;
   
   if (!op){      
       if (stoch_M0_1 < 20 && stoch_M0_2 < stoch_M0_2s && stoch_M0_1s < stoch_M0_1){
          out_type=- 1 ;
          op= true ;
          out_op_price= Close [ 0 ];
          out_op_time= Time [ 0 ];
          arrowName= "Buy" + TimeToStr ( TimeCurrent (), TIME_DATE | TIME_SECONDS );
          fDrawArrow(arrowName= "" ,out_op_price,out_op_time,Blue, 240 );               //стрелка открытой позиции
      }
          
   }     
}
//+=================================================================================+
void fOpen_sell
   (
   bool op,                                 //открытая/закрытая позиция
   datetime & out_op_time,                       //время открытия
   double & out_op_price,                         //цена открытия
   char & out_type                               //тип открытой позиции -1 СЕЛЛ, 1- БАИ
   )
//--------------------   
{      
   double stoch_M0_1 = iStochastic ( NULL , 0 , 5 , 3 , 3 , MODE_SMA , 0 , MODE_MAIN , 1 );
   double stoch_M0_2 = iStochastic ( NULL , 0 , 5 , 3 , 3 , MODE_SMA , 0 , MODE_MAIN , 2 );
   double stoch_M0_1s= iStochastic ( NULL , 0 , 5 , 3 , 3 , MODE_SMA , 0 , MODE_SIGNAL , 1 );
   double stoch_M0_2s= iStochastic ( NULL , 0 , 5 , 3 , 3 , MODE_SMA , 0 , MODE_SIGNAL , 2 );
   
   string arrowName;
   
   if (!op){      
       if (stoch_M0_1 > 80 && stoch_M0_2 > stoch_M0_2s && stoch_M0_1s > stoch_M0_1){
          out_type=- 1 ;
          op= true ;
          out_op_price= Close [ 0 ];
          out_op_time= Time [ 0 ];
          arrowName= "Sell" + TimeToStr ( TimeCurrent (), TIME_DATE | TIME_SECONDS );
          fDrawArrow(arrowName= "" ,out_op_price,out_op_time,Red, 240 );               //стрелка открытой позиции
      }
          
   }     
}
//+=================================================================================+
void fClose_Pos //jei yra atidaryta, uzdarom
   (
   datetime fop_time,                       //время открытия
   double fop_price,                       //цена открытия
   char ftype                               //тип открытой позиции -1 СЕЛЛ, 1- БАИ
   )
//-------------------   
{
   string arrowName= "Close" + TimeToStr ( TimeCurrent (), TIME_DATE | TIME_SECONDS );    
   double cl_price;
   string fileName= StringConcatenate ( "Strategy_1  " ,Expiration, " " , Period (), ".csv" );
   
   if (Expiration<= 5 ){                     //
       datetime cl_time= Expiration* 60 +op_time;                                         //время закрытия
       if ( TimeCurrent ()>=cl_time){
         
         cl_price= Close [ 0 ];               //цена закрытия         
         fDrawArrow(arrowName,cl_price,cl_time,Yellow, 251 );                             //наносим крестик на график
         fSaveToFile(fileName,Expiration, fop_time, cl_time, fop_price, cl_price, ftype);   //в новую строку сохроняем в файле
      }   
   }
   else {
      cl_time= fExpiration_func(Expiration)* 60 +op_time;                                 //время закрытия
      
       if ( TimeMinute ( TimeCurrent ())>= TimeMinute (cl_time)){
         
         cl_price= Close [ 0 ];      
         fDrawArrow(arrowName,cl_price,cl_time,Yellow, 251 );                             //наносим крестик на график
         fSaveToFile(fileName,fExpiration_func(Expiration), fop_time, cl_time, fop_price, cl_price, ftype); //в новую строку сохроняем в файле
     }
   }   
}
//+=================================================================================+
bool fisNewBar 
   (
   string f_sy,   
   int f_tf
   )
{
     int iIndex = - 1 ;
//----
     switch (f_tf)
    {
         case 1     : iIndex = 0 ; break ;
         case 5     : iIndex = 1 ; break ;
         case 15    : iIndex = 2 ; break ;
         case 30    : iIndex = 3 ; break ;
         case 60    : iIndex = 4 ; break ;
         case 240   : iIndex = 5 ; break ;
         case 1440 : iIndex = 6 ; break ;
         case 10080 : iIndex = 7 ; break ;
         default    : iIndex =- 1 ; break ;
    }
    
     static int LastBar[ 8 ]= { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }; 
     datetime curbar = iTime (f_sy, f_tf, 0 );
     if (LastBar[iIndex] != curbar)
    {
        LastBar[iIndex] = curbar;
         return ( true );
    }
     else
    { return ( false );
 }
 }
//+=================================================================================+
int fExpiration_func
   (
   uchar e
   )
//--------------------   
{  
   uchar ex= 0 ;
   uchar mod= 0 ;
   if (e< 6 ) 
      ex=e; //return(e);
   else {
      mod= fmod (e, 5 );
       if (mod== 4 ) 
         ex=e+mod; //return(e+mod);
       else
         if (mod < 4 ) 
            ex=e-mod; //return(e-mod);
    }     
   return (ex); //grazina laiko tarpa minutemis
}
//+=================================================================================+
bool fisTradeTimeInt     //время торгов
   (
   uchar hstart= 0 , 
   uchar mstart= 0 , 
   uchar hend= 0 , 
   uchar mend= 0
   ) 
//--------------------   
{
   datetime db, de;           
   uchar       hc;              

  db= StrToTime ( TimeToStr ( TimeCurrent (), TIME_DATE )+ " " +hstart+ ":" +mstart);
  de= StrToTime ( TimeToStr ( TimeCurrent (), TIME_DATE )+ " " +hend+ ":" +mend);
  hc= TimeHour ( TimeCurrent ());
   if (db>=de) {
     if (hc>=hend) de+= 24 * 60 * 60 ; 
     else db-= 24 * 60 * 60 ;
  }
   if ( TimeCurrent ()>=db && TimeCurrent ()<=de) return ( True );
   else return ( False );
}
//+=================================================================================+
void fDrawArrow //наносим стрелки на график
   (
   string arrowName= "" ,
   double dwPrice= 0 ,
   datetime dwTime= 0 ,
   color dwColor=Silver,
   uchar dwArrowIndex= 0
   )
//--------------------   
{
   ObjectCreate       ( 0 ,arrowName, OBJ_ARROW , 0 , 0 , 0 , 0 , 0 );                 // создадим стрелку
   ObjectSetInteger   ( 0 ,arrowName, OBJPROP_ARROWCODE ,dwArrowIndex);       // установим код стрелки
   ObjectSetInteger   ( 0 ,arrowName, OBJPROP_COLOR ,dwTime);                 // зададим время
   ObjectSetInteger   ( 0 ,arrowName, OBJPROP_COLOR ,dwColor);               // зададим Цвет
   ObjectSetDouble    ( 0 ,arrowName, OBJPROP_PRICE ,dwPrice);               // зададим цену
   ChartRedraw ( 0 );
}
//+=================================================================================+
//Aritmetinis vidurkis

double fAvgOC
   (
   uchar count_start,       //nuo kurio baro pradesim skaiciuoti
   uchar end_count,         //iki kurio baro skaiciuosime
   uchar j= 0                //keli barai is eiles
   )
//--------------------   
{
   static double sum= 0 ;
   if (sum== 0 ){
       int n= 0 ;
       for ( int i=end_count; i<count_start; i++){
         double h= iClose ( NULL , PERIOD_M1 ,i);  
         double l= iOpen ( NULL , PERIOD_M1 ,i+j); 
         sum+= fabs (h-l);                   //padidinam avg 
         n++;                             //kie kartu buvo didintas avg
      }
       double avg=sum/n;                           //Surandam Mean aritmetini vidurki                 
   }   
   return (avg);                           //grazina kainu skirtumo vidurki
}
//+=================================================================================+
void fSaveToFile
   (
   string fileName,
   char expirration,       //realus ekspiracijos laikas minutemis
   datetime fop_time,
   datetime fcl_time,
   double fop_price,
   double fcl_price,
   uchar ftype
   )
//--------------------   
{
   //--- правильный способ работы в "файловой песочнице"
   ResetLastError ();
  
   int filehandle= FileOpen (fileName, FILE_WRITE | FILE_CSV );
   if (filehandle!= INVALID_HANDLE )
     {
      FileWrite(filehandle,
               expirration, //real expiration time
               fop_time, //TimeToStr(op_time,TIME_DATE|TIME_SECONDS),
               fcl_time, //TimeToStr(cl_time,TIME_DATE|TIME_SECONDS),
               op_price,
               fcl_price,
               type);
       FileClose (filehandle);
       Print ( "FileOpen OK" );
     }
   else Print ( "Операция FileOpen неудачна, ошибка " ,GetLastError());
}
//+=================================================================================+
/*int gUrdala_News()
{
   HideTestIndicators(true);
   int nResult = iCustom(NULL, PERIOD_M1, "Urdala_News", MinDo, MinPosle, ChasPoyasServera, 0, 0);
   HideTestIndicators(false);
   return(nResult);
}*/
//+=================================================================================+
/*datetime SecondsAfter    //grazinamas laiko tarpas po timeOp
   (
   datetime timeOp,      //laiko atskaitos pradzia
   datetime t
   ) 
{
     
   if (t<timeOp) t=timeOp;          
   return(TimeCurrent()-t);
}*/
//+=================================================================================+
//---------------------------------------------------
   /* void click
   (
   int x, 
   int y
   ) 
   {    
      SetCursorPos(x,y); // см. тут _http://www.vsokovikov.narod.ru/New_MSDN_API/Cursor/fn_setcursorpos.htm 
      mouse_event(MOUSEEVENTF_LEFTDOWN, x, y, 0, 0); 
      mouse_event(MOUSEEVENTF_LEFTUP, x, y, 0, 0); 
   }*/
//+=================================================================================+
//---------------------------------------------------
   /*void key
   (
   uchar kodas
   )
   {  
      keybd_event(kodas,0,0,0);      
      keybd_event(kodas,0,KEYEVENTF_KEYUP,0); 
   } */   
 

O zaman soru, iki değerin nasıl döndürüleceğidir. Bu şekilde denedim ama hatalar

 void OnTick ()
  {
//---
   
   xy( 10 , 20 , 100 , 100 );
   Print ( "x=" ,x, "y=" ,y);
  }
//+------------------------------------------------------------------+
void xy( int xx, int xxx, int yy, int yyy, int & x, int & y){
   x=xx*xxx;
   y=yy+yyy;
}
 
gince :

O zaman soru, iki değerin nasıl döndürüleceğidir. Bu şekilde denedim ama hatalar


 void OnTick ()
  {
//---
   int x,y;
   xy( 10 , 20 , 100 , 100 ,x,y);
   Print ( "x=" ,x, "y=" ,y);
  }
//+------------------------------------------------------------------+
void xy( int xx, int xxx, int yy, int yyy, int &x, int &y){
   x=xx*xxx;
   y=yy+yyy;
}
 
gince :

O zaman soru, iki değerin nasıl döndürüleceğidir. Bu şekilde denedim ama hatalar


Ve değişkenler kullanmayı denemedi. Aniden yardım

 void OnTick ()
  {
//---
   int x= 100.0 , y= 100.0 ;
   xy( 10 , 20 , 100 , 100 , x,y);
   Print ( "x=" ,x, "y=" ,y);
  }
//+------------------------------------------------------------------+
void xy( int xx, int xxx, int yy, int yyy, int & x, int & y){
   x=xx*xxx;
   y=yy+yyy;
}
 

sakıncası yoksa yardım et

danışmana göstergeye göre ticaret yapmayı öğretin

BS_Living Now ver #1.mq4 https://www.mql5.com/ru/code/11014#50910

UP= iCustom(Symbol(),NULL,"Şimdi",BQuant,0,0);

DOW= iCustom(Symbol(),NULL,"Şimdi",BQuant,1,0);


if(DOW){OrderSend(Symbol(), OP_SELL, Lot, Bid, Slip, 0, 0, "Forex-Robots.ru SAT", Magic, 0,Red);}


if(UP ){OrderSend(Symbol(), OP_BUY, Lot, Ask, Slip, 0, 0, "Forex-Robots.ru BUY", Magic, 0,Blue);}


Yorum

(

"\n Kar: ", YUKARI,

"\n Kar: ", DOW

);

Değerleri yorum yoluyla almaya çalıştım ama her zaman statikler, bu göstergede verilerin nasıl görüntülendiğini söyle

 
Vinin :


Ve değişkenler kullanmayı denemedi. Aniden yardım


Teşekkürler Çalışıyor

 
sannin :

sakıncası yoksa yardım et

danışmana göstergeye göre ticaret yapmayı öğretin

BS_Living Now ver #1.mq4 https://www.mql5.com/ru/code/11014#50910


UP= iCustom ( Symbol (), NULL , "Now" ,BQuant, 0 , 2 ); //

DOW= iCustom ( Symbol (), NULL , "Now" ,BQuant, 1 , 2 );


if (DOW != 0 ){ OrderSend ( Symbol (), OP_SELL , Lot, Bid , Slip, 0 , 0 , "Forex-Robots.ru SELL" , Magic, 0 ,Red);}



if (UP != 0 ){ OrderSend ( Symbol (), OP_BUY , Lot, Ask , Slip, 0 , 0 , "Forex-Robots.ru BUY" , Magic, 0 ,Blue);}
Pek girmedim ama şöyle bir şey düşünüyorum.