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

 
//+----------------------------------------------- --------------------+
//| 주문 삭제 및/또는 마감, 볼륨별로 필터링 |
//------------------------------------------------ ----------------------
#property show_inputs
//------------------------------------------------ --------------------
외부 이중 MinLot = 0.01; //삭제/닫을 수 있는 최소 로트
외부 이중 MaxLot = 0.1; //삭제/닫는 최대 로트
extern bool 구매 = 거짓; //구매 주문의 삭제/닫기 방향
extern bool 판매 = 거짓; //판매 주문 방향 삭제/닫기
extern bool 보류 = true; //대기 중인 주문 삭제
extern bool 시장 = true ; //시장 포지션 닫기
extern int 미끄러짐 = 2; //시장 포지션 마감 시 가격 하락
//------------------------------------------------ --------------------
정수 시작()
{
이중 SL,TP;
string txt=StringConcatenate("주문을 삭제하거나 닫기 위한 스크립트, 시작 ",TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));
새로 고침();

부울 오류=참;
int 오류, OT, 티켓, nn;
더블 OOP,OL;
동안(사실)
{
(int j = OrdersTotal()-1; j >= 0; j--)
{
if (OrderSelect(j, SELECT_BY_POS))
{
if ((OrderSymbol() == Symbol()))
{
OL = OrderLots();
if (OL<MinLot || OL>MaxLot) 계속
OT = 주문 유형();
if (!market && OT<2) 계속;
if (!pending && OT>1) 계속;
티켓 = OrderTicket();
OOP = OrderOpenPrice();
만약 (OT==OP_BUY)
{
error=OrderClose(Ticket,OrderLots(),NormalizeDouble(Bid,Digits),slippage,Red);
if (오류) txt = StringConcatenate(txt,"\n구매 주문 마감 ",티켓);
else txt = StringConcatenate(txt,"\n닫는 오류 ",GetLastError());
}
만약 (OT==OP_SELL)
{
error=OrderClose(Ticket,OrderLots(),NormalizeDouble(Ask,Digits),slippage,Blue);
if (오류) txt = StringConcatenate(txt,"\n판매 주문 마감 ",티켓);
else txt = StringConcatenate(txt,"\nError ",GetLastError()," 종료 ",Ticket);
}
만약 (OT>1)
{
error=OrderDelete(티켓);
if (오류) txt = StringConcatenate(txt,"\nOrder ",StrOrdersType(OT)," ", 티켓);
else txt = StringConcatenate(txt,"\n오류 ", GetLastError()," 삭제 ",StrOrdersType(OT)," ", 티켓);
}
만약 (!오류)
{
오류 = GetLastError();
(오류<2) 계속하면;
if (오류==129)
{ Comment("잘못된 가격",TimeToStr(TimeCurrent(),TIME_SECONDS));
수면(5000);
새로 고침();
계속하다;
}
if (오류==146)
{
j++;
if (IsTradeContextBusy()) Sleep(2000);
계속하다;
}
Comment("오류 ",오류," 주문 마감 N ",OrderTicket(),
" ",TimeToStr(TimeCurrent(),TIME_SECONDS));
}
}
}
}
정수 = 0;
(j = 0; j < OrdersTotal(); j++)
{
if (OrderSelect(j, SELECT_BY_POS))
{
if (OrderSymbol() == Symbol())
{
OL = OrderLots();
if (OL<MinLot || OL>MaxLot) 계속
OT = 주문 유형();
if (!market && OT<2) 계속;
if (!pending && OT>1) 계속;
엔++;
}
}
}
if (n==0) 중단;
ㄴ++;
if (nn>10) {Comment("모든 거래를 성사시키지 못했습니다. 아직 ",n);break;}
수면(1000);
새로 고침();
}
Comment(txt,"\n스크립트가 작업을 완료했습니다 ",TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));
리턴(0);
}
//------------------------------------------------ --------------------
문자열 StrOrdersType(int t)
{
if (t==OP_BUY) return("구매");
if (t==OP_SELL) return("판매");
if (t==OP_BUYLIMIT) return("구매한도");
if (t==OP_SELLLIMIT) return("SellLimit");
if (t==OP_BUYSTOP) return("구매 중지");
if (t==OP_SELLSTOP) return("판매 중지");
}

//------------------------------------------------ --------------------

이 스크립트는 로트의 크기에 따라 배치될 쌍을 닫습니다. 로트 크기별로 모든 쌍에 대한 모든 미결 주문을 마감하도록 추가하거나 변경할 항목. 지연은 관심이 없습니다.

 
Vitek, SRC 버튼을 사용 하여 코드를 삽입하십시오 ! 읽을 수 없는 족쇄를 파헤쳐야 하는 사람은 누구입니까?!
 
pu6ka :
예, Ask 가격은 보이지 않지만 있습니다. :)
시각화 도우미에서 일시 중지하고 차트 속성에서 "표시 라인 표시"를 선택하고 테스트를 계속할 수 있습니다. 그리고 명목상 MT4의 가격 차트는 Bid에 따라 작성됩니다.

테스트의 품질을 결정하는 요소와 이를 최대로 개선하는 방법은 무엇입니까?
 
Zver4991 :

테스트의 품질을 결정하는 요소와 이를 최대로 개선하는 방법은 무엇입니까?
솔직히 말해서, 나는 모른다. 필요할 때까지 사이트 검색
 

친애하는 전문가들.
주기를 사용하지 않고 보류 중인 주문 그리드를 여는 방법을 알려주실 수 있습니까?
어렵지 않다면 최소한 그러한 코드의 대략적인 예를 보여주십시오.
각 후속 그리드 주문에 대한 단계 및 로트 크기를 변경할 수 있는 기능.

 
Forexman77 :
나는 라인을 넣어

int 티켓 대신; 오류가 나옵니다:

'=' - 배열에 왼쪽 대괄호가 필요함('=' - 배열에 왼쪽 대괄호가 필요함)

'>' - 배열에 필요한 왼쪽 대괄호

'>' - 예기치 않은 토큰('>' - 예기치 않은 토큰)

')' - 할당 예상(')' - 할당 예상 )

'continue' - 일부 주기 내에서만 사용되는 '중단' 또는 '계속'

그리고 훨씬 더.


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

친애하는 전문가들.
주기를 사용하지 않고 보류 중인 주문 그리드를 여는 방법을 알려주실 수 있습니까?
어렵지 않다면 최소한 그러한 코드의 대략적인 예를 보여주십시오.
각 후속 그리드 주문에 대한 단계 및 로트 크기를 변경할 수 있는 기능.

예, 실제로 사이클과 동일합니다 ... 사이클이 없을 때만. 당신은 당신이 주기에서 그것을 여는 방법을 보여주고 당신이 주기를 사용하고 싶지 않은 이유를 설명합니다. 그렇지 않으면 당신이 실제로 얻고자 하는 것이 명확하지 않습니다 .
 
borilunad :
Vityok, SRC 버튼을 사용하여 코드를 삽입하십시오! 읽을 수 없는 족쇄를 파헤쳐야 하는 사람은 누구입니까?!

 //+------------------------------------------------------------------+
//| удаления и/или закрытие ордера, с фильтрацией его по объему |
//---------------------------------------------------------------------
#property show_inputs
//--------------------------------------------------------------------
extern double MinLot = 0.01 ; //минимальный лот который удаляем/закываем
extern double MaxLot = 0.1 ; //максимальный лот который удаляем/закываем
extern bool Buy = false ; //удалять/закрывать направление buy ордеров
extern bool Sell = false ; //удалять/закрывать направление sell ордеров
extern bool pending = true ; //удалить отложенные ордера
extern bool market = true ; //закрыть рыночные позиции
extern int slippage = 2 ; //проскальзывание цены при закрытии рыночных позиций
//--------------------------------------------------------------------
int start()
{
double SL,TP;
string txt= StringConcatenate ( "Скрипт удаления или закрытие ордера, старт " , TimeToStr ( TimeCurrent (), TIME_DATE | TIME_SECONDS ));
RefreshRates ();

bool error= true ;
int Error,OT,Ticket,nn;
double OOP,OL;
while ( true )
{
for ( int j = OrdersTotal ()- 1 ; j >= 0 ; j--)
{
if ( OrderSelect (j, SELECT_BY_POS ))
{
if (( OrderSymbol () == Symbol ()))
{
OL = OrderLots ();
if (OL<MinLot || OL>MaxLot) continue ;
OT = OrderType ();
if (!market && OT< 2 ) continue ;
if (!pending && OT> 1 ) continue ;
Ticket = OrderTicket ();
OOP = OrderOpenPrice ();
if (OT== OP_BUY )
{
error= OrderClose (Ticket, OrderLots (), NormalizeDouble ( Bid , Digits ),slippage,Red);
if (error) txt = StringConcatenate (txt, "\nЗакрыт ордер BUY " ,Ticket);
else txt = StringConcatenate (txt, "\nОшибка закрытия " ,GetLastError());
}
if (OT== OP_SELL )
{
error= OrderClose (Ticket, OrderLots (), NormalizeDouble ( Ask , Digits ),slippage,Blue);
if (error) txt = StringConcatenate (txt, "\nЗакрыт ордер SELL " ,Ticket);
else txt = StringConcatenate (txt, "\nОшибка " ,GetLastError(), " закрытия " ,Ticket);
}
if (OT> 1 )
{
error= OrderDelete (Ticket);
if (error) txt = StringConcatenate (txt, "\nУдален ордер " ,StrOrdersType(OT), " " ,Ticket);
else txt = StringConcatenate (txt, "\nОшибка " ,GetLastError(), " удаления " ,StrOrdersType(OT), " " ,Ticket);
}
if (!error)
{
Error = GetLastError();
if (Error< 2 ) continue ;
if (Error== 129 )
{ Comment ( "Неправильная цена " , TimeToStr ( TimeCurrent (), TIME_SECONDS ));
Sleep ( 5000 );
RefreshRates ();
continue ;
}
if (Error== 146 )
{
j++;
if ( IsTradeContextBusy ()) Sleep ( 2000 );
continue ;
}
Comment ( "Ошибка " ,Error, " закрытия ордера N " , OrderTicket (),
" " , TimeToStr ( TimeCurrent (), TIME_SECONDS ));
}
}
}
}
int n= 0 ;
for (j = 0 ; j < OrdersTotal (); j++)
{
if ( OrderSelect (j, SELECT_BY_POS ))
{
if ( OrderSymbol () == Symbol ())
{
OL = OrderLots ();
if (OL<MinLot || OL>MaxLot) continue ;
OT = OrderType ();
if (!market && OT< 2 ) continue ;
if (!pending && OT> 1 ) continue ;
n++;
}
}
}
if (n== 0 ) break ;
nn++;
if (nn> 10 ) { Comment ( "Не удалось закрыть все сделки, осталось еще " ,n); break ;}
Sleep ( 1000 );
RefreshRates ();
}
Comment (txt, "\nСкрипт закончил свою работу " , TimeToStr ( TimeCurrent (), TIME_DATE | TIME_SECONDS ));
return ( 0 );
}
//--------------------------------------------------------------------
string StrOrdersType( int t)
{
if (t== OP_BUY ) return ( "Buy" );
if (t== OP_SELL ) return ( "Sell" );
if (t== OP_BUYLIMIT ) return ( "BuyLimit" );
if (t== OP_SELLLIMIT ) return ( "SellLimit" );
if (t== OP_BUYSTOP ) return ( "BuyStop" );
if (t== OP_SELLSTOP ) return ( "SellStop" );
}
//--------------------------------------------------------------------

이 스크립트는 로트의 크기에 따라 배치될 쌍을 닫습니다. 로트 크기별로 모든 쌍에 대한 모든 미결 주문을 마감하도록 추가하거나 변경할 항목. 지연은 관심이 없습니다.

 
Vitek2010 :

이 스크립트는 로트 크기별로 배치할 쌍을 닫습니다. 로트 크기별로 모든 쌍에 대한 모든 미결 주문을 마감하도록 추가하거나 변경할 항목. 지연은 관심이 없습니다.

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

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

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

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

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

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