[ARŞİV] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 3. - sayfa 509

 

edyuson :
Как зделать, чтоб не сразу умножал, а скажем через два-три раза? Пример: лот=0,01, еще - 0,01, еще - 0,01 и только после умножать. Подскажите, если не много возни. Спасибо.

sergeev :

bir int sayacı yapın ve her açtığınızda +1 ekleyin.

İstenilen sayaç değerini yazdıktan sonra zaten ve lot*koef'in yapmasına izin verin.


Evet, düşündüğüm kadar kolay değil, şimdi gerçek olmaya başladı. Ve döngü: lot-0.01, lot-0.01, lot-0.01 ve sadece lot-0.02, lot-0.02, lot-0.02 ile çarpıldıktan sonra daha fazla: lot-0.04, lot -0.04, lot-0.04 .... kesilmelidir. kar ile ve geyik ile devam edin. Başka bir forumdaki adamlardan bunun gibi seçenekler vardı: double koef[]={ 1.0, 2.0, 1.0, 1.0, 1.0, 2.0, 1.0, 1 ilan edebilirsiniz. 0, 1.0, 2.0 .......} - bir dizi olarak, onu gerekli katsayılarla ve bir statik veya global değişkenle doldurma int k=0;
Sonra lot=lot*koef[k++]; Seri başlangıcı: k=0;

ve bunlar:
int k = 1;
int değeri = 3;
if (k/koef == k) { lot*=2; k++; } ama bu değil.

Denenmiş tür sayacı: int j;
için(j=0; j<15; j++)
, ama yine değil. Evet, hepsi burada:
intX=0;
çift S = 0.0000;
dış çift lot=0.01;
dış çift katsayı=2.0;
harici int SL=30;
harici int TP=120;
çift dl;
çift a;
int init()
{
a=çok;
dönüş(0);
}
int tanım()
{
dönüş(0);
}

int başlangıç()

{
if(OrdersTotal() == 0 && X==1)
{
if (Close[0]>dl){lot=a;}
X=0;
}

if(OrdersTotal() == 0 && X==2)
{
if (Kapat[0]<dl){lot=a;}
X=0;
}


if (OrdersTotal() == 0 && Kapat[1]>Aç[1])
{
dl=Kapat[0];
OrderSend(Symbol(),OP_BUY,lot,Ask,3,Ask-SL*0.0001,Ask+TP*0.0001,"",14774,0,Mavi);
//------------------------------------------------ --------------------

lot=lot*koef;
X=1;
}

if(OrdersTotal() == 0 && Kapat[1]<Aç[1])
{
dl=Kapat[0];
OrderSend(Symbol(),OP_SELL,lot,Bid,3,Bid+SL*0.0001,Bid-TP*0.0001,"",14774,0,Kırmızı);
// Burada bir tür haleler olmalı , belki sen yardım edebilirsin
lot=lot*koef;

X=2;
}
}
dönüş(0);
// Şimdi sadece bir martin

 

Teşekkür ederim ama bak iki fiyat var biri emir açılış fiyatı diğeri zararı durdur fiyatı, zararı durduracak puan sayısı ve puan fiyatı belli. Ve lot büyüklüğü nasıl hesaplanır, böylece kayıp, örneğin fiyat stop loss'a ulaşırsa depozitonun %10'una eşit olur? Sadece sayılarla aram gerçekten kötü.

Ve hala anlamıyorum

Çapraz oranlar için, dolar cinsinden ifade edilen bir pip değeri, formül kullanılarak hesaplanır.
PIP = LOT_SIZE * TICK_SIZE * BASE_QUOTE / CURRENT_QUOTE,
burada LOT_SIZE lot boyutu, TICK_SIZE onay boyutu, BASE_QUOTE ABD doları karşısında temel (ilk) para biriminin geçerli fiyatı , CURRENT_QUOTE çiftin geçerli fiyatıdır.

ABD doları karşısında ilk para birimini anlamak nasıl?

 

Evet... sıkı... :-)

ABD doları için temel (ilk) para birimi, - bu, GBP'den JPY'ye - GBP / JPY örneğinde GBP / USD olacaktır

İşlemdeki pozisyonun işlem hacminin hesaplanması ile ihtiyacınız olan bu scripti, sermaye miktarına ve stop loss büyüklüğüne bağlı olarak yeniden tasarladım.

İhtiyacın var - "Bir sorunla karşılaştım ve üçüncü gün mücadele ettim ve çözemiyorum. Biten danışmanda, çok yerine % risk girmeye karar verdim, bu yüzden hesaplamanız gerekiyor örneğin, durağa kadar lot, 10.000'lik bir depo ile risk %1'dir, 100 pp'lik bir stop ile risk yaklaşık 0.1 lot olacaktır, ancak 200'lük bir stop ile lotun zaten 0,05 olması gerekir. %1'in aynı seviyede kalma riski. Umarım her şeyi net bir şekilde anlatabilmişimdir." ve buraya yazıyorsun:

" Ve lot büyüklüğü nasıl hesaplanır, böylece kayıp, örneğin fiyat stop loss değerine ulaşırsa depozitonun %10'una eşit olur? Rakamlarla gerçekten çok sıkıyım."

Genel olarak, ders kitabından lot hesaplama işlevini yeniden düzenledim - açıklama ve yaklaşım aynıdır, yalnızca lotu mevduat değerinin bir yüzdesi ile hesaplamak yerine, işlem gören lot tam olarak sizinkine göre hesaplanır (benim tarafımdan verilir) bu örnekte - yukarıdaki bağlantıdaki komut dosyasına bakın) koşullar:

 extern string A0 = "Параметры ММ и мониторинга" ;
extern double Lots = 0 ;           // Стартовый лот = 0 для использования максимального риска на капитал в процентах, в зависимости от величины стоп-лосса
extern int StopLoss = 1000 ;
extern int TakeProfit = 4000 ;       // TakeProfit для новых ордеров (пунктов)
extern    double MaxRisk = 10 ;       // риск на капитал в %
                                   // рассчитываем объем позиции взависимости от размера стопа, при заданном риске
                                   // например при депо 10 000 риск 1% при стопе 100 пп это будет примерно лот 0.1,
                                   // при стопе 200 пп уже лот должен быть 0.05, для того чтобы риск 1% остался на том же уровне

int start()
{    
   //----------------------------------СТАРТ------------------------------------------------------------------------------------- 
 
// ...  

//----------------------------------Расчет объема лота------------------------------------------------------------------------ 
   if (Lot(StopLoss)==false)  
                        {
                           Comment ( " Пополните счет. Не хватает средств на минимальный лот. Советник остановлен." ); // Если средств не хватает на мин, то выход
                           Print   ( "Не хватает средств на минимальный лот. Lots_New = " ,Lots_New, " AccountFreeMargin() = " , AccountFreeMargin ()); 
                                                                                                   // Если средств не хватает на мин, то выход
                           return ( 0 );
                        }  
// ---------НОРМАЛИЗУЕМ НОВЫЕ РАСЧЕТНЫЕ ЛОТЫ И ОТКРЫВАЕМ ОЧЕРЕДНУЮ ПОЗИЦИЮ...                          
   Lots_New = NormalizeLots(Lots_New);      

//... здесь условия на открытие поз и установка ордеров

} //------------------------------------------Конец Старт-----------------------------------------------------

//+------------------------------------------------------------------+
//| Нормализация лота                                                |
//+------------------------------------------------------------------+

double NormalizeLots( double lot)
{
   double lotStep = MarketInfo ( Symbol (), MODE_LOTSTEP);
   double lots = NormalizeDouble (lot / lotStep, 0 ) * lotStep;   
   lots = MathMax (lots, MarketInfo ( Symbol (), MODE_MINLOT));
   lots = MathMin (lots, MarketInfo ( Symbol (), MODE_MAXLOT));   
   return (lots);
}

//--------------------------------------------------------------------
// Lot.mqh
// 
//--------------------------------------------------------------- 1 --
// Функция вычисления количества лотов.
// Глобальные переменные:
// double Lots_New - количество лотов для новых ордеров (вычисляется)
// double Lots     - желаемое количество лотов, заданное пользовател.
// double  MaksRisk  - процент риска
// Возвращаемые значения:
// true  - если средств хватает на минимальный лот
// false - если средств не хватает на минимальный лот
//--------------------------------------------------------------- 2 --
bool Lot( int sl)                               // Позовательская ф-ия
  {
   string Symb   = Symbol ();                     // Финансовый инструм.
   double One_Lot= MarketInfo (Symb,MODE_MARGINREQUIRED); //Стоим. 1 лота
   double Min_Lot= MarketInfo (Symb,MODE_MINLOT); // Мин. размер. лотов
   double Max_Lot = MarketInfo ( Symbol (),MODE_MAXLOT);
   double Step   = MarketInfo (Symb,MODE_LOTSTEP); //Шаг изменен размера
   double Free   = AccountFreeMargin ();         // Свободные средства
   double LotVal = MarketInfo ( Symbol (),MODE_TICKVALUE); //стоимость 1 пункта для 1 лота
   

//--------------------------------------------------------------- 3 --
   if (Lots > 0 )                                 // Лоты заданы явно..
     {                                         // ..проверим это
       double Money=Lots*One_Lot;               // Стоимость ордера
       if (Money<= AccountFreeMargin ())           // Средств хватает..
         Lots_New=Lots;                         // ..принимаем заданное
       else                                      // Если не хватает..
         Lots_New= MathFloor (Free/One_Lot/Step)*Step; // Расчёт лотов
     }
//--------------------------------------------------------------- 4 --
   else                                          // Если лоты не заданы
     {                                         // то берём процент 
                                               // Желаем. колич.лотов:
                                               
      Lots_New = MathFloor ((Free*MaxRisk/ 100 )/(sl*LotVal)/Step)*Step;
       if (Lots_New<Min_Lot) Lots_New=Min_Lot;
       if (Lots_New>Max_Lot) Lots_New=Max_Lot;
       Print ( "Lot_New в ф-ии Lots = " ,Lots_New, "ширина канала = " ,sl, "Point  = " , Point );
     }
//--------------------------------------------------------------- 5 --
   if (Lots_New < Min_Lot)                     // Если меньше допуст..
      Lots_New=Min_Lot;                         // .. то миниамальный
   if (Lots_New*One_Lot > AccountFreeMargin ()) // Не хватает даже..
     {                                         // ..на минимальн. лот:(
       Print ( "Не хватает средств на минимальный лот.  Lots_New = " ,Lots_New, " AccountFreeMargin() = " , AccountFreeMargin ());   // Сообщение..
       return (false);                           // ..и выход 
     }
   return (true);                               // Выход из польз. ф-ии
  }
//--------------------------------------------------------------- 6 --
 
Reshetov :
 static int Kvadrat = 0 ;



Bu yöntemi denedim. Şimdi, tüm test dönemi için bekleyen bir DURDURMA emri açıldı. ve hepsi bu ... belki terminalim buggy?

Teoride, program her gün sabah 7'den 9'a kadar en yüksek ve en düşük fiyatları bulmalı ve bu seviyelerde stop emirleri vermelidir.

Dosyalar:
 
mamba5 :


Bu yöntemi denedim. Şimdi, tüm test dönemi için bekleyen bir DURDURMA emri açıldı. ve hepsi bu ... belki terminalim buggy?

Ve dergi vlomy'de konuya bakın, buggy tam olarak nedir?
 

Merhaba.

İşlevle ilgili sorun yaşayan var mı

 IsDemo ()

?

Bana sürekli olarak 1 sonuç veriyor - hesabın gerçek (gerçek veya demo olmasına bakılmaksızın).

 
nemo811 :

Merhaba.

İşlevle ilgili sorun yaşayan var mı

?

Bana sürekli olarak 1 sonuç veriyor - hesabın gerçek (gerçek veya demo olmasına bakılmaksızın).

Bir demo hesabındaki kodla grafiğe bir danışman koydum:

 int start()
  {
//----
   if ( IsDemo ()) {
       Print ( "Это демо" );
       return ( 0 );
   }
   Print ( "Это не демо" );
   
//----
   return ( 0 );
}
Dergide şöyle yazıyor: "Bu bir demo."
 
Reshetov :

Bir demo hesabındaki kodla grafiğe bir danışman koydum:

Dergide şöyle yazıyor: "Bu bir demo."

Fibogruplarla ilgili bir demom var - gizemli bir nedenle gerçek hayatta olduğumu söylüyor. Gösterilen sürümünüzde - Bu bir demo değil.

DC'nin kendisinin bir şekilde sapık olduğu ortaya çıktı.

 
nemo811 :

Fibogruplarla ilgili bir demom var - gizemli bir nedenle gerçek hayatta olduğumu söylüyor. Gösterilen sürümünüzde - Bu bir demo değil.

DC'nin kendisinin bir şekilde sapık olduğu ortaya çıktı.

Bazı brokerler hem demo hem de gerçek için bir sunucu tahsis eder. Aracının desteğinde belirtin.
 
Reshetov :
Bazı brokerler hem demo hem de gerçek için bir sunucu tahsis eder. Aracının desteğinde belirtin.

Teşekkür ederim.

Neden: