[경고, 주제 닫힘!] 포럼을 어지럽히지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 당신 없이는 어디에도 없습니다. - 페이지 686

 

itum :

이 문제를 해결하는 방법? 하아

막대의 시작 부분에서 처리 조건을 한 번만 수행하십시오.

또한 옵션으로 주문이 완료되면 설정되고 조건이 크게 변경되면 0으로 재설정되는 플래그를 설정하십시오.

 

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

이전 거래가 수익성이 없는 경우 고문이 이전 로트에 2를 곱한 위치를 열 수 있도록 코드에 삽입해야 하는 항목(및 가능한 경우 삽입 위치)을 알려주십시오.

미리 감사드립니다.

보리스.

 
코드명 Martingale인 Expert Advisors를 찾으십시오.
 

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

찾아봤는데 일란이 안맞네요.

이전 거래가 수익성이 없었지만 그는 무언가를 위해 일하고 싶지 않은 경우 그 금액을 두 배로 늘려야 한다는 사실을 발견했습니다.


 
이것은 아마도 여기에서 코드를 제공받는 경우에도 Expert Advisor에 직접 코드를 삽입할 수 없다는 것을 의미할 것입니다. 그렇죠?
 
Roger :
이것은 아마도 여기에서 코드를 제공받는 경우에도 Expert Advisor에 직접 코드를 삽입할 수 없다는 것을 의미할 것입니다. 그렇죠?

아니요, 그것은 그 어드바이저가 작동하지 않았으며 필요한 코드 조각으로 작동하는 어드바이저를 찾을 수 없다는 것을 의미합니다.
 

여기를 보십시오, https://www.mql5.com/en/forum/104481

 
cyclik33 :

아니요, 그것은 그 어드바이저가 작동하지 않았으며 필요한 코드 조각으로 작동하는 어드바이저를 찾을 수 없다는 것을 의미합니다.

전역 변수 에서 로트의 초기 값을 설정합니다.

 extern double Lot = 0.1

같은 위치에서 로트 값을 포지션 개시 함수로 전송할 변수에 이 값을 할당합니다.

 double Lots_New = Lot;
포지션을 청산한 후 손익을 확인하십시오.
if (isLossLastPos( NULL , - 1 , Magic))
   Lots_New *= 2 ;
else if (!isLossLastPos( NULL , - 1 , Magic))
   Lots_New = Lot;

글쎄, 기능 자체, Igor Kim 덕분에 ...

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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 :

친애하는 프로그래머.
이전 거래가 수익성이 없는 경우 고문이 이전 로트에 2를 곱한 위치를 열 수 있도록 코드에 삽입해야 하는 항목(및 가능한 경우 삽입 위치)을 알려주십시오.
미리 감사드립니다.
보리스.

보리스, 전혀 어렵지 않습니다. 마틴게일 원리를 구현하는 간단한 함수가 있습니다.

 //+------------------------------------------------------------------+
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);
}
//+------------------------------------------------------------------+

초기 볼륨( 이중 로트) 및 단계( 이중 x)를 매개변수로 전달합니다.
이 메서드를 volume 매개변수 대신 OrderSend에 직접 붙여넣습니다.

함수 호출 예:

 if ( OrdersTotal () == 0 ){
   OrderSend ( Symbol (), OP_BUY, getMartinLot( 0.1 , 2 ), Ask, 10 , Bid- 25 * Point , Bid+ 25 * Point );
}
 
마지막 몇 개의 지그재그 극단값을 반환하는 지표를 아는 사람이 있습니까?