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

 

TAMAM. Biz olmayabiliriz. Görünüşe göre ikimiz de yeterli bilgiye sahip değiliz. Sorunun yazarı StopLoss'un nasıl değiştirileceğini sordu. Derinlere inmeyeceğini düşünüyorum.

Ama yine de OrderSend işlevinden sonra atamaya çalışıyorsunuz

 
MaxZ :

OrderSend işlevindeki bu "12" sayısı nedir? :(

Ve sipariş seçimi konusunda beni yanlış anladın ... Şöyle olmalı:

Hey!

Çok teşekkürler! cevaplar için!!!

Muhtemelen kendimi doğru ifade edemedim: fikir şu:

1.4545'te bir satış anlaşması yapılır. fiyat trendin tersine gidiyor - 1.4585.. ve BURADA - bekleyen bir emir 1.4565'te verilmelidir.

kodum düzgün çalışmıyor:

 void otlogka ( int order)
{  
   int a, k= OrdersTotal ();
   for (a=k- 1 ; a>= 0 ; a--){
         if ( OrderSelect (a, SELECT_BY_POS, MODE_TRADES)){
             if ( OrderType ()==OP_BUY){
               if (Bid* Point - OrderOpenPrice ()>40)
               RefreshRates ();
               if (k> 1 ){
                  {
                     order= OrderSend ( Symbol (),OP_SELLLIMIT, 0.02 , OrderOpenPrice ()+20* Point , 1 ,SL, 0 , "Otlogka" ,mn, 5 , 0 );
                  }}}}}
    
           if ( OrderType ()==OP_SELL){
               if (Ask* Point - OrderOpenPrice ()<40)
                   RefreshRates ();
                   if (k> 1 ){
                {
                  order= OrderSend ( Symbol (),OP_BUYLIMIT, 0.02 , OrderOpenPrice ()-20* Point , 1 ,SL, 0 , "Otlogka" ,mn, 5 , 0 );
                }}}

}

Lütfen yardım et!!!

 
FOReignEXchange :

OrderSend işlevi yürütülürken fiyatın değişebileceğini söyledim. Bu nedenle, zaten değiştikten sonra atamak gerekir.

Öyle olabilir:

 if (Opn_B)
{
   Alert ( "Попытка открыть ордер Buy..." );
   RefreshRates ();
   Ticket = OrderSend (Symb, OP_BUY , Lots, Ask, Slippage, 0 , 0 , NULL , MAGIC, 0 , Blue );
   if (Ticket > 0 )
   {
       if ( OrderSelect (Ticket, SELECT_BY_TICKET, MODE_TRADES))
       if ( OrderCloseTime () == 0 )
      {
         Alert ( "Открыт ордер Buy " , Ticket, "." );
         Opn_B = False;
         SL = OrderOpenPrice ()-StopLoss* Point ;
         TP = OrderOpenPrice ()+TakeProfit* Point ;
         
         Alert ( "Попытка модифицировать ордер Buy " , Ticket, "..." );
         if ( OrderModify (Ticket, OrderOpenPrice (), SL, TP, 0 , Blue ))
             Alert ( "Ордер Buy " , Ticket, " модифицирован." );
         else
             Alert ( "Ошибка: " , GetLastError ());
      }
       else
         Alert ( "Да ну нафиг!?" );
   }
   else
       Alert ( "Ошибка: " , GetLastError ());
}
Her yaklaşımın artıları ve eksileri vardır.
 
smartemiy :

Hey!

Çok teşekkürler! cevaplar için!!!

Muhtemelen kendimi doğru ifade edemedim: fikir şu:

1.4545'te bir satış anlaşması yapılır. fiyat trendin tersine gidiyor - 1.4585.. ve BURADA - bekleyen bir emir 1.4565'te verilmelidir.

kodum düzgün çalışmıyor:

Lütfen yardım et!!!

Teklif ve Talep'in Puan ile çarpılması gerekmez. Hemen gözüme çarptı...

Koşullar farklı şekilde oluşturulmalıdır:

 if (Bid- OrderOpenPrice () > 40 * Point )
{...}
if ( OrderOpenPrice ()-Ask > 40 * Point )
{...}

Ve bana ne tür bir değişkeniniz olduğu açık değil mi? Ne değeri var? Nerede hesaplanır?

Ama bu

           if ( OrderType ()==OP_SELL){
               if (Ask* Point - OrderOpenPrice ()<40)
                   RefreshRates ();
                   if (k> 1 ){
                {
                  order= OrderSend ( Symbol (),OP_BUYLIMIT, 0.02 , OrderOpenPrice ()-20* Point , 1 ,SL, 0 , "Otlogka" ,mn, 5 , 0 );
                }}}

bir döngü içine alınmalıdır... Emirlerin yinelendiği döngü, AL ve SATIŞ emirleri için ortak olmalıdır.

Programlamanızda gerçekten kötü bir şey var... Ders kitabını tekrar okumanızı ve basit bir Uzman Danışman yazma, sipariş muhasebesi ve ticaret fonksiyonları konusunda verilen örnekleri incelemenizi tavsiye ederim.


Ayrıca, hatanız: RefreshRates(), önceden tanımlanmış değişkenleri veya zaman serisi dizilerini kullanmak istediğiniz andan önce ayarlanmalıdır, sonra değil...

 
MaxZ :

Teklif ve Talep'in Puan ile çarpılması gerekmez. Hemen gözüme çarptı...

Koşullar farklı şekilde oluşturulmalıdır:


Parantez olması gerekmez mi?

 if ((Bid- OrderOpenPrice ()) > 40 * Point )
{...}
if ((Ask- OrderOpenPrice ()) < 40 * Point )
 
MaxZ :

Teklif ve Talep'in Puan ile çarpılması gerekmez. Hemen gözüme çarptı...

Koşullar farklı şekilde oluşturulmalıdır:

Ve bana ne tür bir değişkeniniz olduğu açık değil mi? Ne değeri var? Nerede hesaplanır?

Ama bu

çevrilmesi gerekiyor...

Programlamanızda gerçekten kötü bir şey var... Ders kitabını tekrar okumanızı ve basit bir Uzman Danışman yazma, sipariş muhasebesi ve ticaret fonksiyonları konusunda verilen örnekleri incelemenizi tavsiye ederim.

Bu, her zamanki Zarar Durdur = SL'dir
 
FOReignEXchange :


Parantez olması gerekmez mi?

Gerekli değil. Ve parantez olmadan çalışacak! :)

Kim daha rahat. El yazısı! :D

 
smartemiy :
Bu, her zamanki Zarar Durdur = SL'dir
Ve nasıl hesaplanır? Ve neden AL ve SAT için ortaktır?

akıllı :

1.4545'te bir satış anlaşması yapılır. fiyat trendin tersine gidiyor - 1.4585.. ve BURADA - bekleyen bir emir 1.4565'te verilmelidir.

Bu arada, eğilime aykırıysa, koşullar tam tersi, eksi olmalıdır:

 if (Bid- OrderOpenPrice () < -40 * Point )
{...}
if ( OrderOpenPrice ()-Ask < -40 * Point )
{...}

Genellikle ifadelerden

ProfitBUY  = Bid- OrderOpenPrice ();
ProfitSELL = OrderOpenPrice ()-Ask;

Karşılık gelen ticarette pip cinsinden kar bulabiliriz. Kâr negatifse, bu zaten bir kayıptır. Burada kaybın 40 pipten fazla olup olmadığını kontrol ediyoruz, o zaman bekleyen bir emir vermeniz gerekiyor.

 
MaxZ :
Ve nasıl hesaplanır? Ve neden AL ve SAT için ortaktır?

Zararı durdur artık o kadar önemli değil..

kod, teoride, işe yarayacak mı? değişikliklerinize tabi

 
smartemiy :

Zararı durdurmak artık o kadar önemli değil..

kod, teoride, işe yarayacak mı? değişikliklerinize tabi

İşe yarayabilir ama doğru mu...

Yine görevinizden:

akıllı :

"1.4545'te bir satış anlaşması yapıldı.. fiyat trendin tersine gidiyor - 1.4585.. ve BURADA - bekleyen bir emir 1.4565'te verilmelidir."

Bir SATIŞ emri açıldı. OrderOpenPrice() 1.4545 değerini döndürür.

Fiyat trende aykırı. Sor = 1.4585. Koşul:

 if ( OrderOpenPrice ()-Ask <= -40 * Point )

çalışacaktır ("<=" işaretini koyun).

Aşağıdaki kodu analiz edelim:

order= OrderSend ( Symbol (),OP_BUYLIMIT, 0.02 , OrderOpenPrice ()-20* Point , 1 ,SL, 0 , "Otlogka" ,mn, 5 , 0 );

Bekleyen bir BUYLIMIT emri 1.4545-20*Puan = 1.4525 fiyattan verilecektir... Ancak 1.4565 olmalıdır.


Ancak bundan önce, tüm kodu yeniden yazmayı deneyin. Çok fazla hata var ve bazı yerler ne yazdığını anlamıyormuş gibi yazılmış.

Neden: