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

 
silachara :

Dosyalarla nasıl çalışılacağını öğrenmeye başladı. terim kolu ile bir araya geldi. Kodu yazdıktan sonra soru ortaya çıktı:

İlk dosya news.csv açıldıktan sonra program kütükbelirteci değişkenine 1 değerini atamıştır.Ardından program ikinci dosyahaber150901.csv'yi açmış ve kütükbelirteci değişkenine 2 değerini atamıştır. tutamacın değeri yalnızca ikinci dosyayı açarken. Başka bir deyişle, ilk açık dosyanın tanıtıcı değerini öldürdüm. Onlar. verilere/içeriklere erişin ve yalnızca ikinci dosyayı kapatabilir miyim? Açık dosyayı saklamak için tek bir değişken kullanmak bir hata mı? Açtığınız her dosya için tanıtıcı için bir değişken oluşturmanız mı gerekiyor?

Dosyayı açtıktan sonra, ona bir "erişim kodu" aldınız - bir tanıtıcı. Kapatana kadar, diğer dosyalar açık olsun veya olmasın, bu dosya ile tutamacı aracılığıyla çalışabilirsiniz.

PS Dosyaları kapatmayı unutmayın (örnekte kapatılmamışlardır).

 

Excel'de araştırma yapmak için bir komut dosyasına ihtiyacınız var.
Tanım.
30 gün boyunca her gün 8.00 - 12.00 arası bir csv dosyasına yazdırın bu süre içinde mumların açılış ve kapanış fiyatlarını yazdırın.Periyot - göstergenin ayarlandığı ancak bir saatten fazla değil Göstergenin kendisi görüntülenmemelidir herhangi bir şey ve arabelleklerde saklanacaktır.

Döngüler nasıl doğru şekilde döndürülür?

 extern int    DayMax     = 30 ;     //количество дней для печати
extern int    DayStart   = 1 ;       //начинаем с первого бара
extern int    HourStart  = 10 ;     //время старта внутри дня
extern int    HourEnd    = 12 ;     //время конца внутри дня
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
//---
   int per= Period ();  
   if (per> 60 ) return ;   //если период больше часа , прекращаем работу скрипта
   double c_o= 0 ,ABS_o_c= 0 ;

  
       for ( int d=DayStart;d<=DayMax;d++) //перебираем дни от DayStart до DayMax, т.е с вчерашнего до 30
      {
           for ( int h= 0 ;h< 60 /per* 24 ;h++) //перебираем бары с нолевого до последнего в сутках учитывая ТФ
          {
             if (Time[h]>HourStart && Time[h]<HourEnd) //проверка промежутка времени
            {
               //данные для печати и печать
               c_o=(Close[h]-Open[h])* Point ;
               ABS_o_c= MathAbs (c_o);
               
               f_PrintToFile(DayOfWeek(), TimeToString ( TimeCurrent (), TIME_DATE | TIME_MINUTES ),Open[h],Close[h],c_o,ABS_o_c);
               Print (DayOfWeek(), TimeToString ( TimeCurrent (), TIME_DATE | TIME_MINUTES ),Open[h],Close[h],c_o,ABS_o_c);
            }
          }
      }      
  }
//+------------------------------------------------------------------+
// 1.  В файл                           
//+------------------------------------------------------------------+
 void f_PrintToFile( int    f_DayOfWeek= 0 ,
                           string f_TimeCurrent= "" , 
                           double f_Open= 0 ,
                           double f_Close= 0 ,
                           double f_c_o= 0 ,
                           double f_ABS_o_c= 0 )
{
   string fileName= StringConcatenate ( Symbol (), " M" , Period (), " Tyrimas" );
   string FileType= ".csv" ;
   int handle;
   handle= FileOpen (fileName+FileType, FILE_WRITE | FILE_READ , ";" );
   if (handle!= INVALID_HANDLE )
   {
       FileSeek (handle, 0 , SEEK_END );
       FileWrite (handle,f_DayOfWeek,f_TimeCurrent,f_Open,f_Close,f_c_o,f_ABS_o_c);
       FileClose (handle);
   }
}

Çizgiden şüpheliyim, çünkü bu döngü muhtemelen günün başlangıcını anlamıyor, ancak sadece sıfır çubuğundan çalışıyor.

 for ( int h= 0 ;h< 60 /per* 24 ;h++)

Anlamama yardım et.

 
Lütfen bana grafiğin gösterge penceresindeki gösterge setinden fiyat tablosundan bir nesneyi nasıl çıkaracağımı söyler misiniz?
 
Leo59 :
Lütfen bana grafiğin gösterge penceresindeki gösterge setinden fiyat tablosundan bir nesneyi nasıl çıkaracağımı söyler misiniz?

Grafik penceresi her zaman 0 indeksine sahiptir.

 bool    ObjectDelete (
   long      chart_id,     // идентификатор графика
   string    object_name   // имя объекта
   );
 
rvc :


tüm sayfayı karıştırdığım için özür dilerim.

Ve kodu doğru bir şekilde eklemek zordur. Editörde özel bir SRC düğmesi var
 
Vinin :
Ve kodu doğru bir şekilde eklemek zordur. Editörde özel bir SRC düğmesi var
Bulunamadı ((
 
rvc :
Bulunamadı ((

Kodu eklemek için SRC video kameranın önüne !

 
вот получилось ))) так как можно ли исправить? вообщем нужно чтобы вместо stop loss выставлялся отложенник либо новая ставка увеличенного лота.
extern double       Lots =0.1;  //стартовый лот
extern double     Factor =2.0;  //множитель лота
extern int         Limit =5;    //ограничение количества умножений лота
extern int      StopLoss =100;  //уровень ограничения убытков
extern int    TakeProfit =100;  //уровень фиксации прибыли
extern int     StartType =0;    //тип стартового ордера, 0-BUY, 1-SELL
extern int         Magic =1000; //индивидуальный номер эксперта
//----
double lots_step;
//----
int ticket_buy;
int ticket_sell;
int lots_digits;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   ticket_buy=-1;
   ticket_sell=-1;
//----
   lots_step=MarketInfo(Symbol(),MODE_LOTSTEP);
//----
   if(lots_step==0.01)
      lots_digits=2;
//----
   if(lots_step==0.1)
      lots_digits=1;
//----
   if(lots_step==1.0)
      lots_digits=0;
//----
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
      if(OrderSelect(pos,SELECT_BY_POS)==true)
         if(OrderMagicNumber()==Magic)
            if(OrderSymbol()==Symbol())
              {
               if(OrderType()==OP_BUY)
                 {
                  ticket_buy=OrderTicket();
                  break;
                 }
               //----
               if(OrderType()==OP_SELL)
                 {
                  ticket_sell=OrderTicket();
                  break;
                 }
              }
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {return(0);}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   double price;
   double lots;
   double lots_test;
//----
   int slip;
   int ticket;
   int pos;
//----
//----открыть стартовый ордер BUY
   if(StartType==0)
      if(ticket_buy<0)
         if(ticket_sell<0)
           {
            ticket=OpenBuy(Lots);
            //----
            if(ticket>0)
               ticket_buy=ticket;
           }
//----
//----открыть следующий ордер BUY при положительном профите ордера BUY
   if(ticket_buy>0)
      if(ticket_sell<0)
         if(OrderSelect(ticket_buy,SELECT_BY_TICKET)==true)
            if(OrderCloseTime()>0)
               if(OrderProfit()>0.0)
                 {
                  ticket=OpenBuy(Lots);
                  //----
                  if(ticket>0)
                     ticket_buy=ticket;
                 }
//----
//----открыть следующий ордер SELL при отрицательном профите ордера BUY
   if(ticket_buy>0)
      if(ticket_sell<0)
         if(OrderSelect(ticket_buy,SELECT_BY_TICKET)==true)
            if(OrderCloseTime()>0)
               if(OrderProfit()<0.0)
                 {
                  lots=NormalizeDouble(MathCeil((OrderLots()*Factor)/lots_step)*lots_step,lots_digits);
                  lots_test=Lots;
                  //----
                  for(pos=0;pos<Limit;pos++)
                     lots_test=NormalizeDouble(MathCeil((lots_test*Factor)/lots_step)*lots_step,lots_digits);
                  //----
                  if(lots_test<lots)
                     lots=Lots;
                  //----
                  ticket=OpenSell(lots);
                  //----
                  if(ticket>0)
                    {
                     ticket_sell=ticket;
                     ticket_buy=-1;
                    }
                 }
//----
//----обслуживание виртуальных стопов ордера BUY
   if(ticket_buy>0)
      if(OrderSelect(ticket_buy,SELECT_BY_TICKET)==true)
         if(OrderCloseTime()==0)
            if(OrderOpenPrice()+TakeProfit*Point<=MarketInfo(Symbol(),MODE_BID))
              {
               price=MarketInfo(Symbol(),MODE_BID);
               slip=MarketInfo(Symbol(),MODE_SPREAD)*2;
               return(OrderClose(ticket_buy,OrderLots(),price,slip,Blue));
              }
//----
   if(ticket_buy>0)
      if(OrderSelect(ticket_buy,SELECT_BY_TICKET)==true)
         if(OrderOpenPrice()-StopLoss*Point>=MarketInfo(Symbol(),MODE_BID))
            if(OrderCloseTime()==0)
              {
               price=MarketInfo(Symbol(),MODE_BID);
               slip=MarketInfo(Symbol(),MODE_SPREAD)*2;
               return(OrderClose(ticket_buy,OrderLots(),price,slip,Blue));
              }
//----
//----открыть стартовый ордер SELL
   if(StartType==1)
      if(ticket_buy<0)
         if(ticket_sell<0)
           {
            ticket=OpenSell(Lots);
            //----
            if(ticket>0)
               ticket_sell=ticket;
           }
//----
//----открыть следующий ордер SELL при положительном профите ордера SELL
   if(ticket_buy<0)
      if(ticket_sell>0)
         if(OrderSelect(ticket_sell,SELECT_BY_TICKET)==true)
            if(OrderCloseTime()>0)
               if(OrderProfit()>0.0)
                 {
                  ticket=OpenSell(Lots);
                  //----
                  if(ticket>0)
                     ticket_sell=ticket;
                 }
//----
//----открыть следующий ордер BUY при отрицательном профите ордера SELL
   if(ticket_buy<0)
      if(ticket_sell>0)
         if(OrderSelect(ticket_sell,SELECT_BY_TICKET)==true)
            if(OrderCloseTime()>0)
               if(OrderProfit()<0.0)
                 {
                  lots=NormalizeDouble(MathCeil((OrderLots()*Factor)/lots_step)*lots_step,lots_digits);
                  lots_test=Lots;
                  //----
                  for(pos=0;pos<Limit;pos++)
                     lots_test=NormalizeDouble(MathCeil((lots_test*Factor)/lots_step)*lots_step,lots_digits);
                  //----
                  if(lots_test<lots)
                     lots=Lots;
                  //----
                  ticket=OpenBuy(lots);
                  //----
                  if(ticket>0)
                    {
                     ticket_buy=ticket;
                     ticket_sell=-1;
                    }
                 }
//----
//----обслуживание виртуальных стопов ордера SELL
   if(ticket_sell>0)
      if(OrderSelect(ticket_sell,SELECT_BY_TICKET)==true)
         if(OrderCloseTime()==0)
            if(OrderOpenPrice()-TakeProfit*Point>=MarketInfo(Symbol(),MODE_ASK))
              {
               price=MarketInfo(Symbol(),MODE_ASK);
               slip=MarketInfo(Symbol(),MODE_SPREAD)*2;
               return(OrderClose(ticket_sell,OrderLots(),price,slip,Red));
              }
//----
   if(ticket_sell>0)
      if(OrderSelect(ticket_sell,SELECT_BY_TICKET)==true)
         if(OrderCloseTime()==0)
            if(OrderOpenPrice()+StopLoss*Point<=MarketInfo(Symbol(),MODE_ASK))
              {
               price=MarketInfo(Symbol(),MODE_ASK);
               slip=MarketInfo(Symbol(),MODE_SPREAD)*2;
               return(OrderClose(ticket_sell,OrderLots(),price,slip,Red));
              }
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| открыть ордер BUY                                                |
//+------------------------------------------------------------------+
int OpenBuy(double lots)
  {
   double price;
//----
   int slip;
//----
   price=MarketInfo(Symbol(),MODE_ASK);
   slip=MarketInfo(Symbol(),MODE_SPREAD)*2;
//----
   return(OrderSend(Symbol(),OP_BUY,lots,price,slip,0.0,0.0,"",Magic,0,Blue));
  }
//+------------------------------------------------------------------+
//| открыть ордер SELL                                               |
//+------------------------------------------------------------------+
int OpenSell(double lots)
  {
   double price;
//----
   int slip;
//----
   price=MarketInfo(Symbol(),MODE_BID);
   slip=MarketInfo(Symbol(),MODE_SPREAD)*2;
//----
   return(OrderSend(Symbol(),OP_SELL,lots,price,slip,0.0,0.0,"",Magic,0,Red));
  }
//+------------------------------------------------------------------+
 
İnsanlar kimden daha çok yardım eder !!!! yoksa gerçekçi değil mi?
 
Acemi bir programcının bekleyen siparişleri silmek için bir komut dosyası yazmasına yardımcı olun. Tüm piyasa pozisyonlarının ve bekleyen satış emirlerinin olmaması durumunda, bekleyen tüm alış emirlerinin silinmesi gerekir.