포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 452

 
Profitov :
그러한 질문이 생겼습니다. 예를 들어 하루에 2%의 손실에 도달하면 모든 거래를 닫는 고문이나 스크립트를 작성할 수 있습니까?

할 수 있다.
 
도움말 - 새 랩톱을 구입했습니다. - Windows 8이 거기에 설치되어 있습니다. - Alpari에서 최신 업데이트된 터미널을 다운로드했습니다. - 이전에 작업한 표시기를 MQL4 폴더에 로드합니다. 표시기 - 표시기는 거기에 표시되지만 터미널에는 없습니다. 사용자 인터페이스 자체에서 지원 서비스는 실제로 아무 것도 작성하지 않습니다. 어떻게 해야 합니까?
 
galinka :
도움말 - 새 랩톱을 구입했습니다. - Windows 8이 거기에 설치되어 있습니다. - Alpari에서 최신 업데이트된 터미널을 다운로드했습니다. - 이전에 작업한 표시기를 MQL4 폴더에 로드합니다. 표시기 - 표시기는 거기에 표시되지만 터미널에는 없습니다. 사용자 인터페이스 자체에서 지원 서비스는 실제로 아무 것도 작성하지 않습니다. 어떻게 해야 합니까?

시스템 메뉴 "파일"에 "데이터 디렉토리 열기"라는 새 항목이 있습니다. 이제 거기에 넣어야 합니다.
 
아니요, 작동하지 않습니다. 터미널에 없습니다.
 

나는 아마도 그것을 하는 방법을 이해하지 못했을 것입니다 - 프로그램 파일-- 나는 alpari-open이 있습니다 ---- 폴더가 있습니다---- MQL4-indikators-- 나는 삽입- 나타납니다- 닫기 --- 터미널을 엽니다 사용자가 아닙니다

 
내 지표에서 뭔가를 변경해야 할 수도 있습니다
 

감사합니다 도움이 되었습니다

 
1mql :

마지막 외부 아래:
extern int 미끄러짐 = 2; //시장 포지션 마감 시 가격 하락

다른 것을 넣으십시오 :
extern bool total_symb = true; //모든 쌍에 대해

그리고 각 라인:
if (( OrderSymbol () == 기호 ()))
그리고
if ( OrderSymbol () == 기호 ())

이것을 교체하십시오:
if ( OrderSymbol () == 기호 () || total_symb)

이론적으로 작동해야 확인합니다.


아니, 작동하지 않습니다. 모든 것이 이전과 같습니다. 활성화된 몇 개의 차트만 닫습니다. 다른 사람들에게는 닫기 오류 4107이 표시됩니다. extern bool Buy = false에서 변경을 시도했습니다. //구매 주문의 삭제/닫기 방향
extern bool 판매 = 거짓; //판매 주문의 방향을 삭제/닫습니다. 에 진실 . 도움이되지 않았습니다. 예를 들어, 열린 위치가 없는 차트를 작성하면 오류 4107이 발생할 때마다 닫히는 차트가 없습니다.
 
Profitov :
그러한 질문이 생겼습니다. 예를 들어 하루에 2%의 손실에 도달하면 모든 거래를 닫는 고문이나 스크립트를 작성할 수 있습니까?
이미 작성 되었습니다.
 
alsu :

이것은 티켓이 어딘가에서 이전 버전에서 여전히 사용된다는 것을 의미합니다. 코드를 정리해야 하는데...

다음과 같이 했습니다.

 Symb= Symbol ();                               // Название фин.инстр.
   Total= 0 ;                                     // Количество ордеров
   int order[ 7 ]; //буффер для семи ордеров
   int ord; //количество ордеров
   ArrayInitialize (order, 0 );//обнуляем количество ордеров
   for ( int i= 1 ; i<= OrdersTotal (); i++)           // Цикл перебора ордер
     {
       if ( OrderSelect (i- 1 , SELECT_BY_POS )== true ) // Если есть следующий
        {                                       // Анализ ордеров:
         if ( OrderSymbol ()!=Symb) continue ;       // Не наш фин. инструм
         if ( OrderType ()> 1 ){ Alert ( "Обнаружен отложенный ордер. Эксперт не работает." ); return ;}
         Total++;                               // Счётчик рыночн. орд
         if (Total> 7 ){ Alert ( "Более 7 ордеров. Эксперт не работает." ); return ;}
         Ticket= OrderTicket ();                   // Номер выбранн. орд.
         Tip   = OrderType ();                     // Тип выбранного орд.
         order  [ OrderType ()]++;                     // ПОЛУЧАЕМ КОЛИЧЕСТВО ОРДЕРОВ           
         Price = OrderOpenPrice ();               // Цена выбранн. орд.
         SL    = OrderStopLoss ();                 // SL выбранного орд.
         TP    = OrderTakeProfit ();               // TP выбранного орд.
         Lot   = OrderLots ();                     // Количество лотов
        }
     }
     ord=order  [ OrderType ()];

 while ( true )                                   // Цикл закрытия орд.
     {
       if (Tip== 0 && Cls_B== true )                 // Открыт ордер Buy..
        {                                       //и есть критерий закр
         Alert ( "Попытка закрыть Buy " ,Ticket, ". Ожидание ответа.." );
         RefreshRates ();                         // Обновление данных
         Ans= OrderClose (Ticket,Lot, Bid , 2 );       // Закрытие Buy
         if (Ans== true ){ Alert ( "Закрыт ордер Buy " ,Ticket); if (ord == 0 ){ Alert ( "Закрыты все ордера " ,ord); break ;} }
         if (Fun_Error(GetLastError())== 1 )       // Обработка ошибок
             continue ;                           // Повторная попытка
         return ;                                 // Выход из start()
        }

포지션은 완전히 닫힙니다. 사실, 오류는 0이며 오류가 없음을 의미하는 부두에 기록됩니다. 그리고 로그에서 "Closed all orders" 메시지를 찾을 수 없습니다.

굵은 글씨는 변경된 라인을 강조 표시했습니다. 작동하는 것 같지만 아직 철저히 테스트하지 않았습니다.

나는 사이클이 어떻게 작동하는지 잘 이해하지 못합니다. 주기의 중간에 위와 아래에 코드가 있다고 가정해 보겠습니다. 사이클의 조건이 일치하면 코드 작업이 사이클 내에서만 실행되어 코드 행이 실행되지 않습니다. 사이클 아래에 무엇이 있습니까? 이 예를 고려할 때 break은 루프 를 중단합니까? 아래 행을 실행하도록 허용하거나 프로그램이 처음부터 계산을 시작합니까?

내가 틀렸다면 정정하십시오. break 는 위치가 있는 주기를 중단하고 그 위에 있는 연산자의 계산 실행을 계속 합니다. 그러면 두 번째 연산자가 있는지 명확하지 않습니다. interrupted 또는 continue 는 일반적으로 모든 코드를 인터럽트하고 처음부터 코드를 실행하도록 프로그램을 보냅니다.