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

 

Siparişi genellikle ayrı işlevlerde gönderirim. Bu yüzden bu anı optimize etmek istedim, böylece hem ertelemeleri hem de piyasa emirlerini tek bir fonksiyonla göndermek mümkün olacaktı.

Bunu uygulamanın en iyi yolunu söyleyebilir misiniz?

Nitekim, bekleyen emir gönderirken, yukarıda (aşağıda) Alış (Bida) açılış fiyatını sırasıyla kontrol etmeniz ve bazı noktaları daha dikkate almanız gerekir.

Başkalarına benziyorum.. Kim'den en basit seçeneği alalım:

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 21.03.2008                                                     |
//|  Описание : Открывает позицию и возвращает её тикет.                       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    op - операция                                                           |
//|    ll - лот                                                                |
//|    sl - уровень стоп                                                       |
//|    tp - уровень тейк                                                       |
//|    mn - MagicNumber                                                        |
//+----------------------------------------------------------------------------+
int OpenPosition( string sy, int op, double ll, double sl= 0 , double tp= 0 , int mn= 0 ) {
   color     clOpen;
   datetime ot;
   double    pp, pa, pb;
   int       dg, err, it, ticket= 0 ;
   string    lsComm=WindowExpertName()+ " " +GetNameTF( Period ());
 
   if (sy== "" || sy== "0" ) sy= Symbol ();
   if (op==OP_BUY) clOpen=clOpenBuy; else clOpen=clOpenSell;
   for (it= 1 ; it<=NumberOfTry; it++) {
     if (!IsTesting() && (!IsExpertEnabled() || IsStopped ())) {
       Print ( "OpenPosition(): Остановка работы функции" );
       break ;
    }
     while (!IsTradeAllowed()) Sleep ( 5000 );
    RefreshRates();
    dg=MarketInfo(sy, MODE_DIGITS);
    pa=MarketInfo(sy, MODE_ASK);
    pb=MarketInfo(sy, MODE_BID);
     if (op==OP_BUY) pp=pa; else pp=pb;
    pp= NormalizeDouble (pp, dg);
    ot= TimeCurrent ();
    ticket= OrderSend (sy, op, ll, pp, Slippage, sl, tp, lsComm, mn, 0 , clOpen);
     if (ticket> 0 ) {
       if (UseSound) PlaySound (NameFileSound); break ;
    } else {
      err= GetLastError ();
       if (pa== 0 && pb== 0 ) Message( "Проверьте в Обзоре рынка наличие символа " +sy);
       // Вывод сообщения об ошибке
       Print ( "Error(" ,err, ") opening position: " ,ErrorDescription(err), ", try " ,it);
       Print ( "Ask=" ,pa, " Bid=" ,pb, " sy=" ,sy, " ll=" ,ll, " op=" ,GetNameOP(op),
             " pp=" ,pp, " sl=" ,sl, " tp=" ,tp, " mn=" ,mn);
       // Блокировка работы советника
       if (err== 2 || err== 64 || err== 65 || err== 133 ) {
        gbDisabled=True; break ;
      }
       // Длительная пауза
       if (err== 4 || err== 131 || err== 132 ) {
         Sleep ( 1000 * 300 ); break ;
      }
       if (err== 128 || err== 142 || err== 143 ) {
         Sleep ( 1000 * 66.666 );
         if (ExistPositions(sy, op, mn, ot)) {
           if (UseSound) PlaySound (NameFileSound); break ;
        }
      }
       if (err== 140 || err== 148 || err== 4110 || err== 4111 ) break ;
       if (err== 141 ) Sleep ( 1000 * 100 );
       if (err== 145 ) Sleep ( 1000 * 17 );
       if (err== 146 ) while (IsTradeContextBusy()) Sleep ( 1000 * 11 );
       if (err!= 135 ) Sleep ( 1000 * 7.7 );
    }
  }
   return (ticket);
}

Hiçbir şeyi kontrol etmiyor. İşlevinin sadece piyasa emirlerini açmaya yönelik olduğu görülebilir.

Bence mantıklı değil. Gönderilirse, herhangi bir türden bir sipariş. Düşündüğüm gibi yazarsanız, ilk bakışta çok uzun çıkacaktır.

Genel olarak, bu anları nasıl daha iyi uygulayabileceğiniz konusunda yardım ve ipuçları istiyorum.

 
hoz :

Siparişi genellikle ayrı işlevlerde gönderirim. Bu yüzden bu anı optimize etmek istedim, böylece hem ertelemeleri hem de piyasa emirlerini tek bir fonksiyonla göndermek mümkün olacaktı.

Bunu uygulamanın en iyi yolunu söyleyebilir misiniz?

Sonuçta, bekleyen emir gönderirken, yukarıda (aşağıda) Sor (Bida) açılış fiyatını sırasıyla kontrol etmeniz ve bazı noktaları daha hesaba katmanız gerekir.

Başkalarına benziyorum.. Kim'den en basit seçeneği alalım:

Hiçbir şeyi kontrol etmiyor. İşlevinin sadece piyasa emirlerini açmaya yönelik olduğu görülebilir.

Bence mantıklı değil. Gönderilirse, herhangi bir türden bir sipariş. Düşündüğüm gibi yazarsanız, ilk bakışta çok uzun çıkacaktır.

Genel olarak, bu anları nasıl daha iyi uygulayabileceğiniz konusunda yardım ve ipuçları istiyorum.

Eh, Igor'un işlevi tam olarak bu işlevin adına yansıyan görevi yerine getiriyor. Bu fonksiyon çağrılmadan ÖNCE tüm ayarlar ve kontroller yapılmalıdır. Sonuçta, işlevin kendisi yalnızca kendisine atanan görevi yapar - kendisine iletilen parametrelerle (işleve) bir konum açar ve daha fazlasını yapmaz. Bunu gerekli hata işleme ile güzelce yapar. Eksik olan - kendiniz düzeltin.

Benzetme ile: bir mağazada hazır kahve satın aldığınızda, kaynar su ve şeker ve diğer malzemelerin otomatik olarak karıştırılması teklif edilmez - kendiniz için nasıl kahve yapacağınızı daha iyi bilirsiniz.

 

Millet, mümkün mü ... Lütfen farklı bir döngü koşulu altında yeniden yazın ...

Yani harika bir bbands_stop göstergesi var:


for (shift=Nbars-Length-1;shift>=0;shift--)

{

smax[shift]=iBands(NULL,0,Length,Deviation,0,PRICE_CLOSE,MODE_UPPER,shift);

smin[shift]=iBands(NULL,0,Length,Deviation,0,PRICE_CLOSE,MODE_LOWER,shift);

if (Close[shift]>smax[shift+1]) trend=1;

if (Close[shift]<smin[shift+1]) trend=-1;


bsmax[shift]=smax[shift]+0.5*(MoneyRisk-1)*(smax[shift]-smin[shift]);

bsmin[shift]=smin[shift]-0.5*(MoneyRisk-1)*(smax[shift]-smin[shift]);

if (trend>0)

UpTrendBuffer[shift]=bsmin[shift];

else

DownTrendBuffer[shift]=bsmax[shift];

}

Ancak bir öncekinin sonuçlarına benzer bir kod da yazmak mümkün mü? Ama zaten döngünün altında:

for(i = 0; i <= limit; i++) {

Oturduğum ikinci gün aklıma gelmiyor...

 
TÜM PRUEVETS soru elbette aptalca, 1 pip'in 1 dolara mal olması için ne kadar lot büyüklüğüne ihtiyaç var
 
0.1
 
FEAR :
TÜM PRUEVETS soru elbette aptalca, 1 pip'in 1 dolara mal olması için ne kadar lot büyüklüğüne ihtiyaç var
Partinin büyüklüğüne bağlıdır.
 
nikelodeon :
0.1
her zaman değil
 
PapaYozh :
her zaman değil
Omuza göre...
 
0.1 kaldıraç ile 1:100
 
nikelodeon :
Omuza göre...

nikelodeon :
0.1 kaldıraç ile 1:100

Bir noktanın değeri söz konusu olduğunda, kaldıraç önemsizdir.