[UYARI, KONU KAPALI!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde. - sayfa 686

 

itum :

Bu sorun nasıl çözülür? Ha

İşlem koşullarını çubuğun başında yalnızca bir kez yapın.

Ayrıca, bir seçenek olarak, sipariş verildiyse ayarlanan ve koşullar önemli ölçüde değiştiğinde sıfıra sıfırlanan bir bayrak ayarlayın.

 

Уважаемые програмисты. 

Lütfen bana koda neyin eklenmesi gerektiğini (ve mümkünse nereye ekleneceğini) söyleyin, böylece danışman, önceki işlem kârsızsa, önceki lotun 2 ile çarpıldığı bir pozisyon açar.

Şimdiden teşekkürler.

Boris.

 
Martingale kod adlı Uzman Danışmanları arayın.
 

Roger :
Ищите советники с кодовым названием Мартингейл.

Aradım ama ilanlar bana uymuyor.

Biri, önceki işlem kârsızsa, partinin iki katına çıkması gerektiğini buldu, ancak bir şey için çalışmak istemiyor


 
Bu muhtemelen, burada size bir kod sunulursa, yine de bunu Expert Advisor'a kendiniz ekleyemeyeceğiniz anlamına gelir, değil mi?
 
Roger :
Bu muhtemelen, burada size bir kod sunulursa, yine de bunu Expert Advisor'a kendiniz ekleyemeyeceğiniz anlamına gelir, değil mi?

hayır, bu danışmanın çalışmadığı anlamına geliyor ve ihtiyacım olan kod parçasıyla çalışan bir tane bulamıyorum.
 
 
cyclik33 :

hayır, bu danışmanın çalışmadığı anlamına geliyor ve ihtiyacım olan kod parçasıyla çalışan bir tane bulamıyorum.

Global değişkenlerde partinin başlangıç değerini ayarlayın:

 extern double Lot = 0.1

Aynı yerde lot değerini pozisyon açma fonksiyonuna aktaracak bir değişkene bu değeri atıyoruz:

 double Lots_New = Lot;
Pozisyonu kapattıktan sonra kar/zarar için kontrol edin:
if (isLossLastPos( NULL , - 1 , Magic))
   Lots_New *= 2 ;
else if (!isLossLastPos( NULL , - 1 , Magic))
   Lots_New = Lot;

Eh, işlevin kendisi, Igor Kim sayesinde ...

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает флаг убыточности последней позиции.                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isLossLastPos( string sy= "" , int op=- 1 , int mn=- 1 ) {
   datetime t;
   int       i, j=- 1 , k=OrdersHistoryTotal();

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_HISTORY)) {
       if (OrderSymbol()==sy || sy== "" ) {
         if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
           if (op< 0 || OrderType()==op) {
             if (mn< 0 || OrderMagicNumber()==mn) {
               if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
   if ( OrderSelect (j, SELECT_BY_POS, MODE_HISTORY)) {
     if (OrderProfit()< 0 ) return (True);
  }
   return (False);
}
 

cyclik33 :

Sevgili programcılar.
Lütfen bana koda neyin eklenmesi gerektiğini (ve mümkünse nereye ekleneceğini) söyleyin, böylece danışman, önceki işlem kârsızsa, önceki lotun 2 ile çarpıldığı bir pozisyon açar.
Şimdiden teşekkürler.
Boris.

Boris, hiç de zor değil, işte martingale ilkesini uygulayan basit bir işlev:

 //+------------------------------------------------------------------+
double getMartinLot( double lot, double x){         //ФУНКЦИЯ УПРАВЛЕНИЯ ОБъЕМОМ ТОРГОВ ПО СИСТЕМЕ МАРТИНГЕЙЛА
   static double balance_before, balance_after;    //ДЛЯ ХРАНЕНИЯ СОСТОЯНИЯ БАЛАНСА ДО И ПОСЛЕ СДЕЛОК
   static double save_Lot;
   balance_after = AccountBalance();               //СОХРАНЕНИЕ ТЕКУЩЕГО СОСТОЯНИЯ БАЛАНСА
   if (balance_after >= balance_before){            //ПРОВЕРКА ИЗМЕНЕНИЯ БАЛАНСА
      save_Lot = lot;                              //ЕСЛИ ОН НЕ ИЗМЕНИЛСЯ ИЛИ СТАЛ БОЛЬШЕ, ТО СБРАСЫВАЕМ ЛОТ ДО БАЗОВОГО
   } else {
      save_Lot *= x;                               //ЕСЛИ СТАЛ МЕНЬШЕ ТО УВЕЛИЧИВАЕМ ЛОТ НА Х РАЗ
   }
   balance_before = balance_after;                 //СОХРАНЯЕМ СОСТОЯНИЕ БАЛАНСА ПОСЛЕ РАБОТЫ
   return (save_Lot);
}
//+------------------------------------------------------------------+

İlk hacmi ( çift lot) ve adımı ( çift x) parametre olarak iletin.
Yöntemi, volume parametresi yerine doğrudan OrderSend'e yapıştırın.

İşlev çağrısı örneği:

 if ( OrdersTotal () == 0 ){
   OrderSend ( Symbol (), OP_BUY, getMartinLot( 0.1 , 2 ), Ask, 10 , Bid- 25 * Point , Bid+ 25 * Point );
}
 
Son birkaç ZigZag uç noktasını döndüren bir gösterge bilen var mı?
Neden: