Hayır, bu yalnızca verilerin bir tarih parçasıyla eşleştiği anlamına gelir.
Örneğin, bunları manuel olarak da sürebilirsiniz. Veya bir metin dosyasından yazın. Veya kasada alın.
Sonuçta, "1.25 1.16 1.73 1.35" bazı koşullu verileri kullanarak bile, yıllar önce bazı para birimleri için tarihe girebiliriz. Ancak bu, bir zaman serisi dizisi düzenlediğimiz anlamına gelmez.
Orijinal komut dosyasını biraz değiştirdi:
1. Özel diziye yalnızca son 5 açılış fiyatı kopyalandı.
2. Ras-Comment-oval, kopyalanan 5 açılış fiyatının tümü için özel dizi aldı.
/+------------------------------------------------------------------------------------------+
//| ArrayGetAsSeries_плюс.mq4 |//+------------------------------------------------------------------------------------------+//| script program start function |//+------------------------------------------------------------------------------------------+//------------------------------------ НАЧАЛО START -------------------------------------- 1 -int start() //функция start
{ //начало startdouble Timestart= GetTickCount (); //переменная, с помощью которой вычисляется время (в милисекундах) начала выполнения эксперта double array1[]; //объявляем массив-приемник (массив, куда будут скопированы данные)int element= ArrayCopy (array1,Open, 0 , 0 , 5 ); //копируем данные по максимальным ценам в пользовательский массив (начиная с 1-о бара, а не с нулевого)int size= ArraySize (array1); //устанавливаем количество элементов массива array1//----------------------------------------------------------------------------------------- 2 -Comment ( "\nФункция ArrayCopy(array1[],Open,0,0,WHOLE_ARRAY) вернула: " ,element,
"\nФункция ArraySize(array1) вернула: " ,size,
"\nЗначение цены открытия бара №0 равно " ,array1[ 0 ], "; Время цены открытия бара №0: " , TimeToStr ( iTime ( NULL , 0 , 0 ),TIME_DATE|TIME_MINUTES),
"\nЗначение цены открытия бара №1 равно " ,array1[ 1 ], "; Время цены открытия бара №1: " , TimeToStr ( iTime ( NULL , 0 , 1 ),TIME_DATE|TIME_MINUTES),
"\nЗначение цены открытия бара №2 равно " ,array1[ 2 ], "; Время цены открытия бара №2: " , TimeToStr ( iTime ( NULL , 0 , 2 ),TIME_DATE|TIME_MINUTES),
"\nЗначение цены открытия бара №3 равно " ,array1[ 3 ], "; Время цены открытия бара №3: " , TimeToStr ( iTime ( NULL , 0 , 3 ),TIME_DATE|TIME_MINUTES),
"\nЗначение цены открытия бара №4 равно " ,array1[ 4 ], "; Время цены открытия бара №4: " , TimeToStr ( iTime ( NULL , 0 , 4 ),TIME_DATE|TIME_MINUTES),
"\nФункция ArrayGetAsSeries(array1) вернула: " , ArrayGetAsSeries (array1),
"\nСкрипт выполнялся всего " , GetTickCount ()-Timestart, " миллисекунд, из них: " , MathFloor (( GetTickCount ()-Timestart)/ 1000 ),
" секунд " ,(( GetTickCount ()-Timestart)/ 1000 - MathFloor (( GetTickCount ()-Timestart)/ 1000 ))* 1000 , " миллисекунд" ); //печать //сообщения на экран//----------------------------------------------------------------------------------------- 3 -return ( 0 ); //выход из start
} //конец start//-------------------------------------- КОНЕЦ START -------------------------------------- 4 -
Bunu anladım:
Şekilden de görülebileceği gibi açılış fiyatları ters sırada endekslenmiştir (barın açılış fiyatının SAYISI (ARTAN sırayla) ve barın açılış fiyatının ZAMANI (AZAN sırayla) ile kanıtlandığı gibi), yani. dizi, bir zaman dizisi dizisi olarak düzenlenmiştir.
ANCAK ArrayGetAsSeries işlevi hala 0 (yanlış) döndürür; bu, özel dizinin bir zaman dizisi dizisi olarak DÜZENLENMEDİĞİ anlamına gelir.
1. Özel diziye yalnızca son 5 açılış fiyatı kopyalandı.
2. Ras-Comment-oval, kopyalanan 5 açılış fiyatının tümü için özel dizi aldı.
Bunu anladım:
Şekilden de görülebileceği gibi açılış fiyatları ters sırada endekslenmiştir (barın açılış fiyatının SAYISI (ARTAN sırayla) ve barın açılış fiyatının ZAMANI (AZAN sırayla) ile kanıtlandığı gibi), yani. dizi, bir zaman dizisi dizisi olarak düzenlenmiştir.
ANCAK ArrayGetAsSeries işlevi hala 0 (yanlış) döndürür; bu, özel dizinin bir zaman dizisi dizisi olarak DÜZENLENMEDİĞİ anlamına gelir.
açıklık getirmeni rica ediyorum
Soru : nasıl açıklanır?
PS Sorularıma cevap verdiğiniz için teşekkürler.
Özellikleri denemedim.
bool ArraySetAsSeries (
void dizisi[], bool kümesi)
Dizideki indeksleme yönünü ayarlar.Set TRUE parametresinin değeri, indeksleme yönünü ters sırada ayarlar, yani son elemanın indeksi sıfırdır. YANLIŞ değeri, normal indeksleme yönünü ayarlar. İşlev önceki durumu döndürür.
Dizideki indeksleme yönünü ayarlar.Set TRUE parametresinin değeri, indeksleme yönünü ters sırada ayarlar, yani son elemanın indeksi sıfırdır. YANLIŞ değeri, normal indeksleme yönünü ayarlar. İşlev önceki durumu döndürür.
Seçenekler:
sıralamak[]
-
Ayarlanacak sayısal dizi.
Ayarlamak
-
Dizi indekslemenin yönü.
Bu aşamadaki amacım, şu veya bu işlevin nasıl çalıştığını ve bu özel durumda ArrayGetAsSeries işlevinin nasıl çalıştığını anlamaktır . ArraySetAsSeries işlevini, timeseries dizisinde olduğu gibi dizine eklemeyi zorlayacak set=true parametresiyle kullanabileceğinizi anlıyorum. Ancak benim durumumda ArrayGetAsSeries işlevinin neden 0 döndürdüğünü anlamak istiyorum , ancak dışarıdan dizi bir zaman serisi gibi görünüyor (yani bir zaman serisi gibi indekslenmiş)
i_maShiftByPrice ile ilgili bir sorun olabilir mi???
Tam olarak söylemek zor.
Yanlış bilgi görüntüler. İşte tam kod:
#property copyright "hoz"#property link ""#include <stderror.mqh>#include <stdlib.mqh>externstring h1 = "основные параметры машки" ;
externint i_maTF = 0 ;
externint i_maPeriod = 50 ;
externint i_maShiftByPrice = 0 ;
externint i_maMethod = 0 ;
externint i_maPrice = 0 ;
externint i_shiftBarsBack1 = 1 ; // Первое значение shiftexternint i_shiftBarsBack2 = 49 ; // Второе значение shiftexternstring h2 = "===============================" ;
string h3 = "Значения цены и времени в точках А и В гипотенузы" ;
double price1, // Цена в точке А
price2, // Цена в точке В
time1, // Время в точке А
time2, // Время в точке Вstring h4 = "Переменые массивов цены и времени в точках А и В гипотенузы" ;
double varsPrice1[ 100 ], // Буфер для цены в точке А
varsPrice2[ 100 ], // Буфер для цены в точке В
varsTime1[ 100 ], // Буфер для времени в точке А
varsTime2[ 100 ], // Буфер для времени в точке В#property indicator_separate_window#property indicator_buffers 5#property indicator_color1 Red//+------------------------------------------------------------------+//| Функция инициализации индикатора |//+------------------------------------------------------------------+int init()
{
IndicatorDigits ( MarketInfo ( Symbol (),MODE_DIGITS));
SetIndexBuffer ( 0 ,varsAngle); // Связываем массив значений угла с буферомSetIndexStyle ( 0 , DRAW_HISTOGRAM );
// -------------- блок инициализации закончен ----------------------return ( 0 );
}
//+------------------------------------------------------------------+//| Функция деинициализации индикатора |//+------------------------------------------------------------------+int deinit()
{
// -------------- блок деинициализации закончен ----------------------return ( 0 );
}
//+------------------------------------------------------------------+//| Функция итерации эксперта |//+------------------------------------------------------------------+int start()
{
int i, countedBars = IndicatorCounted ();
int limit = Bars - countedBars;
if (limit > 100 ) limit = 100 ;
for (i = limit - 1 ;i > 0 ;i--)
{
price1 = iMA ( Symbol (),i_maTF,i_maPeriod,i_maShiftByPrice,i_maMethod,i_maPrice,i_shiftBarsBack1+i); // Цена в точке А
price2 = iMA ( Symbol (),i_maTF,i_maPeriod,i_maShiftByPrice,i_maMethod,i_maPrice,i_shiftBarsBack2+i); // Цена в точке В
time1 = iTime ( Symbol (), Period (),i_shiftBarsBack1 + i - 1 ); // Время в точке А
time2 = iTime ( Symbol (), Period (),i_shiftBarsBack2 + i - 1 ); // Время в точке ВPrint ( "i = " , i, " i_maTF = " , i_maTF, " i_maPeriod = " , i_maPeriod, " i_maShiftByPrice " , i_maShiftByPrice, " i_maMethod = " , i_maMethod, " i_maPrice = " , i_maPrice, " i_shiftBarsBack1 = " , i_shiftBarsBack1);
string error = GetMyLastError2();
// Print("vars", DoubleToStr(price1,5));// Print("vars", DoubleToStr(varsPrice1[i],5));
varsPrice1[i] = price1; // Массив цен в точке А
varsPrice2[i] = price2; // Массив цен в точке В
varsTime1[i] = time1; // Массив времени в точке А
varsTime2[i] = time2; // Массив времени в точке В// Print("vars", DoubleToStr(varsPrice1[i],5));double d = ( MathAbs (varsTime1[i] - varsTime2[i]))* 1.0 ;
double h = ( MathAbs (varsPrice1[i] - varsPrice2[i]));
// Print("d = ", d, " h = ", h);double angle = h/d;
varsAngle[i] = angle;
}
return ( 0 );
}
string GetMyLastError2()
{
int err = GetLastError ();
string serr = ErrorDescription(err);
return (serr);
}
/* //+------------------------------------------------------------------+
//| Функция рассчёта тангенса угла |
//+------------------------------------------------------------------+
double TanA(double d, double h)
{
double angle = h/d;
return(0);
}
// -------------- блок деинициализации закончен ---------------------- */
Verdiğiniz kod derlenmiyorsa, günlükte nasıl bir şey almayı başardığınızı merak ediyorum ???
Ve derlerseniz, tuhaflıklar olmayacak.
Her zaman her şeyi normal şekilde derlerim.
Kimsenin kafasını karıştırmamak için kodu gereksiz baskılardan ve değişkenlerden temizledim. Ama aşağıda onları görmek için kaldırmadım, o yüzden derlemedim. İşte derleyen tam kod:
//+------------------------------------------------------------------+//| AngleByTg.mq4 |//| hoz |//| |//+------------------------------------------------------------------+#property copyright "hoz"#property link ""#include <stderror.mqh>#include <stdlib.mqh>externstring h1 = "основные параметры машки" ;
externint i_maTF = 0 ;
externint i_maPeriod = 50 ;
externint i_maShiftByPrice = 0 ;
externint i_maMethod = 0 ;
externint i_maPrice = 0 ;
externint i_shiftBarsBack1 = 1 ; // Первое значение shiftexternint i_shiftBarsBack2 = 49 ; // Второе значение shiftexternstring h2 = "===============================" ;
string h3 = "Значения цены и времени в точках А и В гипотенузы" ;
double price1, // Цена в точке А
price2, // Цена в точке В
time1, // Время в точке А
time2, // Время в точке В
angle; // Значение возвращаемой тангенсомstring h4 = "Переменые массивов цены и времени в точках А и В гипотенузы" ;
double varsPrice1[ 100 ], // Буфер для цены в точке А
varsPrice2[ 100 ], // Буфер для цены в точке В
varsTime1[ 100 ], // Буфер для времени в точке А
varsTime2[ 100 ], // Буфер для времени в точке В
varsAngle[ 100 ]; // Буфер для хранения значение угла#property indicator_separate_window#property indicator_buffers 5#property indicator_color1 Red//#property indicator_minimum -90//#property indicator_maximum 90//+------------------------------------------------------------------+//| Функция инициализации индикатора |//+------------------------------------------------------------------+int init()
{
IndicatorDigits ( MarketInfo ( Symbol (),MODE_DIGITS));
SetIndexBuffer ( 0 ,varsAngle); // Связываем массив значений угла с буферомSetIndexStyle ( 0 , DRAW_HISTOGRAM );
// -------------- блок инициализации закончен ----------------------return ( 0 );
}
//+------------------------------------------------------------------+//| Функция деинициализации индикатора |//+------------------------------------------------------------------+int deinit()
{
// -------------- блок деинициализации закончен ----------------------return ( 0 );
}
//+------------------------------------------------------------------+//| Функция итерации эксперта |//+------------------------------------------------------------------+int start()
{
// if (!isNewBar())// return(0);int i, countedBars = IndicatorCounted ();
int limit = Bars - countedBars;
if (limit > 100 ) limit = 100 ;
for (i = limit - 1 ;i > 0 ;i--)
{
price1 = iMA ( Symbol (),i_maTF,i_maPeriod,i_maShiftByPrice,i_maMethod,i_maPrice,i_shiftBarsBack1+i); // Цена в точке А
price2 = iMA ( Symbol (),i_maTF,i_maPeriod,i_maShiftByPrice,i_maMethod,i_maPrice,i_shiftBarsBack2+i); // Цена в точке В
time1 = iTime ( Symbol (), Period (),i_shiftBarsBack1 + i - 1 ); // Время в точке А
time2 = iTime ( Symbol (), Period (),i_shiftBarsBack2 + i - 1 ); // Время в точке ВPrint ( "i = " , i, " i_maTF = " , i_maTF, " i_maPeriod = " , i_maPeriod, " i_maShiftByPrice " , i_maShiftByPrice, " i_maMethod = " , i_maMethod, " i_maPrice = " , i_maPrice, " i_shiftBarsBack1 = " , i_shiftBarsBack1);
string error = GetMyLastError2();
// Print("i = ", i," time1 = ", time1, " price1 = ", price1);// Print("vars", DoubleToStr(price1,5));// Print("vars", DoubleToStr(varsPrice1[i],5));
varsPrice1[i] = price1; // Массив цен в точке А
varsPrice2[i] = price2; // Массив цен в точке В
varsTime1[i] = time1; // Массив времени в точке А
varsTime2[i] = time2; // Массив времени в точке В// Print("vars", DoubleToStr(varsPrice1[i],5));//Print("i = ", i," time1 = ", time1, " price1 = ", price1);// Print("i = ", i," time2 = ", time2, " price2 = ", price2);// Print("i = ", i," varsTime1[i] = ", varsTime1[i], " varsPrice1[i] = ", varsPrice1[i]);// Print("i = ", i," varsTime2[i] = ", varsTime2[i], " varsPrice2[i] = ", varsPrice2[i]);double d = ( MathAbs (varsTime1[i] - varsTime2[i]))* 1.0 ;
double h = ( MathAbs (varsPrice1[i] - varsPrice2[i]));
// Print("d = ", d, " h = ", h);double angle = h/d;
varsAngle[i] = angle;
// Print("i = ", i," varsAngle[i] = ", varsAngle[i]);
}
return ( 0 );
}
string GetMyLastError2()
{
int err = GetLastError ();
string serr = ErrorDescription(err);
return (serr);
}
/* //+------------------------------------------------------------------+
//| Функция рассчёта тангенса угла |
//+------------------------------------------------------------------+
double TanA(double d, double h)
{
double angle = h/d;
return(0);
}
// -------------- блок деинициализации закончен ---------------------- */
Bana yardım et lütfen! Expert Advisor'da yeni bir sipariş açıldığında eskisinin kapanması için nasıl yapılır? Test cihazında iyi çalışıyor, ancak gerçekte, bir nedenden dolayı, yenisini açtığınızda eskisi gidiyor ????????? Programlamada nihayet sıfırlayabiliyorum (((
//---- input parameters //ooooooooooooooooooooooooooooooooooooooooooooooooo extern bool In_BUY=true; extern int SL_buy=62; //---входные параметры по лонгам extern int Risk_buy=0; //ooooooooooooooooooooooooooooooooooooooooooooooooo extern bool In_SELL=true; extern int SL_sell=62; //---входные параметры по шортам extern int Risk_sell=0; //ooooooooooooooooooooooooooooooooooooooooooooooooo
//---- other parameters static int prevtime=0; int ticket=0; int x=1; //---------------------------------------------- int Magic_BUY =123; int Magic_SELL =321;
//+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- if(Digits == 5) x=10; //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //----
//---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //oooooooooooooooooooooooooooooooooooooooooooooooooooo if (Time[0] == prevtime) return(0); prevtime = Time[0]; if (!IsTradeAllowed()) { prevtime=Time[1]; MathSrand(TimeCurrent());Sleep(30000 + MathRand()); //--- формировка бара--- } //ooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
Trade( Magic_BUY, In_BUY,Ask,0,2, SL_buy, Risk_buy); //---торговля по лонгам
Trade(Magic_SELL,In_SELL,Bid,2,0, SL_sell,Risk_sell); //---торговля по шортам
Bana yardım et lütfen! Expert Advisor'da yeni bir sipariş açıldığında eskisinin kapanması için nasıl yapılır? Test cihazında iyi çalışıyor, ancak gerçekte, bir nedenden dolayı, yenisini açtığınızda eskisi gidiyor ????????? Programlamada nihayet sıfırlayabiliyorum (((
//---- input parameters //ooooooooooooooooooooooooooooooooooooooooooooooooo extern bool In_BUY=true; extern int SL_buy=62; //---входные параметры по лонгам extern int Risk_buy=0;
7777877 : Bu aşamadaki amacım, şu veya bu işlevin nasıl çalıştığını ve bu özel durumda ArrayGetAsSeries işlevinin nasıl çalıştığını anlamaktır. ArraySetAsSeries işlevini set=true parametresiyle kullanabileceğinizi anlıyorum; bu, bir zaman serisi dizisinde olduğu gibi dizine eklemeyi zorlayacaktır. Ancak benim durumumda ArrayGetAsSeries işlevinin neden 0 döndürdüğünü anlamak istiyorum , ancak dışarıdan dizi bir zaman serisi gibi görünüyor (yani bir zaman serisi gibi indekslenmiş)
Kesinlikle çünkü sadece bir zaman serisi gibi GÖRÜNÜYOR.
Bu sadece senin kişisel görüşün. Ve orada 1, 2, 1.2, 2.1 sayılarını puanlayarak, 1927'de domuz eti zaman serisine götürüleceksiniz (sayı isteğe bağlıdır). Ancak bu, diziyi bir zaman serisi yapmaz - bunu ilgili işlevle açıkça belirtmeniz gerekir.
MQL5.com web sitesine giriş yapmak için çerezlerin kullanımına izin vermelisiniz.
Lütfen tarayıcınızda gerekli ayarı etkinleştirin, aksi takdirde giriş yapamazsınız.
Hesabınıza giriş yaptınız. İki faktörlü kimlik doğrulama devre dışı bırakıldı. Yeniden kurup yeni bir QR kodu tarayın veya iki faktörlü kimlik doğrulama devre dışıyken devam edin.
Bunu düşünmek istemediğimi anlıyorum, ancak sorun sizin için açıksa en azından bir ipucu verebilir misiniz?
Lütfen tüm kodu sağlayın
Hayır, bu yalnızca verilerin bir tarih parçasıyla eşleştiği anlamına gelir.
Örneğin, bunları manuel olarak da sürebilirsiniz. Veya bir metin dosyasından yazın. Veya kasada alın.
Sonuçta, "1.25 1.16 1.73 1.35" bazı koşullu verileri kullanarak bile, yıllar önce bazı para birimleri için tarihe girebiliriz. Ancak bu, bir zaman serisi dizisi düzenlediğimiz anlamına gelmez.
Orijinal komut dosyasını biraz değiştirdi:
1. Özel diziye yalnızca son 5 açılış fiyatı kopyalandı.
2. Ras-Comment-oval, kopyalanan 5 açılış fiyatının tümü için özel dizi aldı.
Bunu anladım:
Şekilden de görülebileceği gibi açılış fiyatları ters sırada endekslenmiştir (barın açılış fiyatının SAYISI (ARTAN sırayla) ve barın açılış fiyatının ZAMANI (AZAN sırayla) ile kanıtlandığı gibi), yani. dizi, bir zaman dizisi dizisi olarak düzenlenmiştir.
ANCAK ArrayGetAsSeries işlevi hala 0 (yanlış) döndürür; bu, özel dizinin bir zaman dizisi dizisi olarak DÜZENLENMEDİĞİ anlamına gelir.
açıklık getirmeni rica ediyorum
Soru : nasıl açıklanır?
PS Sorularıma cevap verdiğiniz için teşekkürler.
Orijinal komut dosyasını biraz değiştirdi:
1. Özel diziye yalnızca son 5 açılış fiyatı kopyalandı.
2. Ras-Comment-oval, kopyalanan 5 açılış fiyatının tümü için özel dizi aldı.
Bunu anladım:
Şekilden de görülebileceği gibi açılış fiyatları ters sırada endekslenmiştir (barın açılış fiyatının SAYISI (ARTAN sırayla) ve barın açılış fiyatının ZAMANI (AZAN sırayla) ile kanıtlandığı gibi), yani. dizi, bir zaman dizisi dizisi olarak düzenlenmiştir.
ANCAK ArrayGetAsSeries işlevi hala 0 (yanlış) döndürür; bu, özel dizinin bir zaman dizisi dizisi olarak DÜZENLENMEDİĞİ anlamına gelir.
açıklık getirmeni rica ediyorum
Soru : nasıl açıklanır?
PS Sorularıma cevap verdiğiniz için teşekkürler.
Özellikleri denemedim.
Özellikleri denemedim.
i_maTF == Dönem() ??????,
i_maPeriod makul bir değer alıyor???
i_maShiftByPrice ile ilgili bir sorun olabilir mi???
Tam olarak söylemek zor.
Yanlış bilgi görüntüler. İşte tam kod:
Uzman günlüğünde aşağıdakileri verir:
Gördüğünüz gibi, i_maTF, i_maPeriod ve i_maPrice değişkenleri başlattığımla aynı değil. Sorun nedir?
Yanlış bilgi görüntüler. İşte tam kod:
Uzman günlüğünde aşağıdakileri verir:
Gördüğünüz gibi, i_maTF, i_maPeriod ve i_maPrice değişkenleri başlattığımla aynı değil. Sorun nedir?
Verdiğiniz kod derlenmiyorsa, günlükte nasıl bir şey almayı başardığınızı merak ediyorum ???
Ve derlerseniz, hiçbir tuhaflık olmayacak.
Verdiğiniz kod derlenmiyorsa, günlükte nasıl bir şey almayı başardığınızı merak ediyorum ???
Ve derlerseniz, tuhaflıklar olmayacak.
Her zaman her şeyi normal şekilde derlerim.
Kimsenin kafasını karıştırmamak için kodu gereksiz baskılardan ve değişkenlerden temizledim. Ama aşağıda onları görmek için kaldırmadım, o yüzden derlemedim. İşte derleyen tam kod:
Bana yardım et lütfen! Expert Advisor'da yeni bir sipariş açıldığında eskisinin kapanması için nasıl yapılır? Test cihazında iyi çalışıyor, ancak gerçekte, bir nedenden dolayı, yenisini açtığınızda eskisi gidiyor ????????? Programlamada nihayet sıfırlayabiliyorum (((
//ooooooooooooooooooooooooooooooooooooooooooooooooo
extern bool In_BUY=true;
extern int SL_buy=62; //---входные параметры по лонгам
extern int Risk_buy=0;
//ooooooooooooooooooooooooooooooooooooooooooooooooo
extern bool In_SELL=true;
extern int SL_sell=62; //---входные параметры по шортам
extern int Risk_sell=0;
//ooooooooooooooooooooooooooooooooooooooooooooooooo
//---- other parameters
static int prevtime=0;
int ticket=0;
int x=1;
//----------------------------------------------
int Magic_BUY =123;
int Magic_SELL =321;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
if(Digits == 5) x=10;
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//oooooooooooooooooooooooooooooooooooooooooooooooooooo
if (Time[0] == prevtime) return(0);
prevtime = Time[0];
if (!IsTradeAllowed()) {
prevtime=Time[1]; MathSrand(TimeCurrent());Sleep(30000 + MathRand()); //--- формировка бара---
}
//ooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
Trade( Magic_BUY, In_BUY,Ask,0,2, SL_buy, Risk_buy); //---торговля по лонгам
Trade(Magic_SELL,In_SELL,Bid,2,0, SL_sell,Risk_sell); //---торговля по шортам
//ooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
return(0);//-----------выход из стартовой функции------------
}
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
void Trade(int mn,bool flag,double price,int period_1,int period_2,int sl,int Risk) {
int total=OrdersTotal();
for (int i = 0; i < total; i++) { OrderSelect(i, SELECT_BY_POS, MODE_TRADES);//---проход по ордерам--
if (OrderSymbol() == Symbol() && OrderMagicNumber() == mn) {
if(Open[period_2]>Open[period_1]) { //----условие закрытия ордера---------
OrderClose(OrderTicket(),OrderLots(),price,5*x); RefreshRates();
}
return(0);
}
}
//ooooooooooooooooooooooooooooooooooooooooooooooooooo
ticket = -1;
if ( flag &&
Open[period_1]>Open[period_2] && //----вход в рынок по условию---
OrdersTotal()<2 && //-----ограничения чемпионата------
AccountEquity()>200 &&
IsTradeAllowed()) {
if (mn<200) {
ticket= OrderSend(Symbol(), OP_BUY,lot(Risk_buy),Ask,5,Bid-x*sl*Point,0,DoubleToStr(mn,0),mn,0,Blue);
}
else {
ticket= OrderSend(Symbol(),OP_SELL,lot(Risk_sell),Bid,5,Ask+x*sl*Point,0,DoubleToStr(mn,0),mn,0, Red);
}
RefreshRates();
if ( ticket < 0) { Sleep(30000); prevtime = Time[1]; }
} //-- Exit ---
return(0); }
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
double lot(int R) { if (R<0)R=0; if (R>80)R=80; //------корректность ввода -------
double minlot = MarketInfo(Symbol(), MODE_MINLOT);
int o = MathAbs(MathLog(minlot) *0.4343) + 0.5;
double lot = minlot;
//ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
lot = NormalizeDouble(AccountFreeMargin() * 0.00001*R, o);//---
if (AccountFreeMargin() < lot * MarketInfo(Symbol(), MODE_MARGINREQUIRED)) {
lot = NormalizeDouble(AccountFreeMargin() / MarketInfo(Symbol(), MODE_MARGINREQUIRED), o);
}
//ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
if(lot < minlot) lot = minlot;
double maxlot =MarketInfo(Symbol(), MODE_MAXLOT);
if(lot > maxlot) lot = maxlot;
return(lot); }
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_end_film_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Veya 1 açık, 2 açık-1 kapalı, 3 açık-2 kapalı vb. prensibine göre çalışacak başka bir danışman yazmak mümkündür. Yardım çok ama çok gerekli!
Bana yardım et lütfen! Expert Advisor'da yeni bir sipariş açıldığında eskisinin kapanması için nasıl yapılır? Test cihazında iyi çalışıyor, ancak gerçekte, bir nedenden dolayı, yenisini açtığınızda eskisi gidiyor ????????? Programlamada nihayet sıfırlayabiliyorum (((
//ooooooooooooooooooooooooooooooooooooooooooooooooo
extern bool In_BUY=true;
extern int SL_buy=62; //---входные параметры по лонгам
extern int Risk_buy=0;
Yer değiştirmek
üzerinde
Bu aşamadaki amacım, şu veya bu işlevin nasıl çalıştığını ve bu özel durumda ArrayGetAsSeries işlevinin nasıl çalıştığını anlamaktır. ArraySetAsSeries işlevini set=true parametresiyle kullanabileceğinizi anlıyorum; bu, bir zaman serisi dizisinde olduğu gibi dizine eklemeyi zorlayacaktır. Ancak benim durumumda ArrayGetAsSeries işlevinin neden 0 döndürdüğünü anlamak istiyorum , ancak dışarıdan dizi bir zaman serisi gibi görünüyor (yani bir zaman serisi gibi indekslenmiş)
Kesinlikle çünkü sadece bir zaman serisi gibi GÖRÜNÜYOR.
Bu sadece senin kişisel görüşün. Ve orada 1, 2, 1.2, 2.1 sayılarını puanlayarak, 1927'de domuz eti zaman serisine götürüleceksiniz (sayı isteğe bağlıdır). Ancak bu, diziyi bir zaman serisi yapmaz - bunu ilgili işlevle açıkça belirtmeniz gerekir.