당신은 내 코드를 잘못 이해했습니다... 러시아어로 번역 중입니다... 테스트 모드가 아니고(EA가 거래를 허용하지 않거나 Expert Advisors가 중지된 경우) 주기를 중단하십시오. 간단히 말해서 이 줄은 도구 모음의 "전문가" 버튼에서 손을 떼면 루프를 종료합니다.
불행히도 배열에도 불일치가 있습니다 ... 주문을 카운팅하는 코드로 0보다 큰 조건(Lts>0)으로 로트를 하나씩 닫습니다(수익 달성 조건에 따라) , 총 이익을 고려할 필요가 있지만:
int Tip ;// Тип ордераint Ticket =0,// Номер ордера
Tkt ;// Количество номеров ордеровdouble Lot =0,// Количество закр. лотов
Lts ;// Количество лотов всегоdouble Price_Cls ;// Цена закрытия ордераint Errors ;//--------------------------------------------------------------- 3 --for(int mm =1; mm <= Mas_Ord_Tek [0][0]; mm ++)// Цикл по живым ордерам{if( Mas_Ord_Tek [ mm ][6]== Tip &&// Среди ордеров нашего типа
Mas_Ord_Tek [ mm ][5]> Lot &&// .. выбираем лоты
Mas_Ord_Tek [ mm ][4]> Ticket )// .. выбираем номер ордера{// Этот больше ранее найден.
Lts = Mas_Ord_Tek [ mm ][5]+ Lot ;
Tkt = Mas_Ord_Tek [ mm ][4]+ Ticket ;}}if( Tip ==0) Price_Cls =Bid;// Для ордеров Buyif( Tip ==1) Price_Cls =Ask;// Для ордеров Sellif( BuyOrdProf >100&& Lts >0)
Ans =OrderClose( Tkt , Lts , Price_Cls ,0,Red);// Закрыть все ордера
그리고 주문 계산에 1개 이상의 로트(Lts>1)가 있는 경우 로트가 마감되지 않습니다.
int Tip ;// Тип ордераint Ticket =0,// Номер ордера
Tkt ;// Количество номеров ордеровdouble Lot =0,// Количество закр. лотов
Lts ;// Количество лотов всегоdouble Price_Cls ;// Цена закрытия ордераint Errors ;//--------------------------------------------------------------- 3 --for(int mm =1; mm <= Mas_Ord_Tek [0][0]; mm ++)// Цикл по живым ордерам{if( Mas_Ord_Tek [ mm ][6]== Tip &&// Среди ордеров нашего типа
Mas_Ord_Tek [ mm ][5]> Lot &&// .. выбираем лоты
Mas_Ord_Tek [ mm ][4]> Ticket )// .. выбираем номер ордера{// Этот больше ранее найден.
Lts = Mas_Ord_Tek [ mm ][5]+ Lot ;
Tkt = Mas_Ord_Tek [ mm ][4]+ Ticket ;}}if( Tip ==0) Price_Cls =Bid;// Для ордеров Buyif( Tip ==1) Price_Cls =Ask;// Для ордеров Sellif( BuyOrdProf >100&& Lts >1)
Ans =OrderClose( Tkt , Lts , Price_Cls ,0,Red);// Закрыть все ордера
누가 오류를 보는지 알려주십시오.
아니면, Igor, 내가 당신의 기능을 잘못 이해하고 있습니까?
BuyOrdProf=GetProfitOpenBuyPosInCurrency(OP_BUY); // 함수 호출
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Возвращает суммарный профит открытых позиций в валюте депозита |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+double GetProfitOpenPosInCurrency (string sy ="",int op =-1,int mn =-1){double p =0;int i , k =OrdersTotal();if( sy =="0") sy =Symbol();for( i =0; i < k ; i ++){if(OrderSelect( i , SELECT_BY_POS , MODE_TRADES )){if((OrderSymbol()== sy || sy =="")&&( op <0||OrderType()== op )){if(OrderType()==OP_BUY||OrderType()==OP_SELL){if( mn <0||OrderMagicNumber()== mn ){
p +=OrderProfit()+OrderCommission()+OrderSwap();}}}}}return( p );}
컴뱃 17.07.2009 22:13
요약하면, 우리는 매수 3 랏의 합을 구하고 이 매도 3 랏의 양의 카운터를 설정합니다.
...........................
옵션으로 그렇습니다. 그러나 이미 열린 판매 주문이 있는 경우 EA가 필요한 주문을 마감하지 않을 수 있습니다. 이것은 해결할 수 있지만.
컴뱃 17.07.2009 22:13
그러나 질문: 모든 포지션을 청산할 수 있습니까?
예, 스크립트를 사용하여 순차적으로 하나씩 할 수 있습니다. 빠릅니다! 그리고 모든 것...
...........................
이것이 제가 지금 사용하고 있는 것입니다. 스크립트 세트 - 이것 또는 저것 중 하나를 사용합니다... 하지만 내 전략을 Expert Advisor로 코딩하려고 시도했지만 여러 가지 어려움에 부딪쳤습니다.
여기에서 무언가가 작동하지 않는다는 것은 닫히지 않는다는 의미이며 오류가 발생하지 않습니다.
b-Positions.mqh 라이브러리의 ClosePositions() 함수에서 KimIV는 테스터에서 사용을 금지하는 다른 ClosePosBySelect() 함수에 대한 호출을 사용합니다.
if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
백테스트의 경우 그의 라이브러리 b-ForTest.mqh 를 사용하십시오.
b-Positions.mqh 라이브러리의 ClosePositions() 함수에서 KimIV는 테스터에서 사용을 금지하는 다른 ClosePosBySelect() 함수에 대한 호출을 사용합니다.
if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
백테스트의 경우 그의 라이브러리 b-ForTest.mqh 를 사용하십시오.
당신은 내 코드를 잘못 이해했습니다... 러시아어로 번역 중입니다... 테스트 모드가 아니고(EA가 거래를 허용하지 않거나 Expert Advisors가 중지된 경우) 주기를 중단하십시오. 간단히 말해서 이 줄은 도구 모음의 "전문가" 버튼에서 손을 떼면 루프를 종료합니다.
좋은 저녁이에요,
불행히도 배열에도 불일치가 있습니다 ... 주문을 카운팅하는 코드로 0보다 큰 조건(Lts>0)으로 로트를 하나씩 닫습니다(수익 달성 조건에 따라) , 총 이익을 고려할 필요가 있지만:
그리고 주문 계산에 1개 이상의 로트(Lts>1)가 있는 경우 로트가 마감되지 않습니다.
누가 오류를 보는지 알려주십시오.
아니면, Igor, 내가 당신의 기능을 잘못 이해하고 있습니까?
BuyOrdProf=GetProfitOpenBuyPosInCurrency(OP_BUY); // 함수 호출
Igor, 표시기에 PriceOpenLastPos 기능을 삽입하는 방법을 알려주십시오.
컴파일할 때 편집기는 첫 번째 대괄호와 후속 변수에 대해 오류를 제공합니다.
이중 PriceOpenLastPos ( 문자열 sy="", int op=-1, int mn=-1) {
날짜 시간 t;
이중 r=0;
int k=OrdersTotal();
if (sy=="0") sy=Symbol();
(i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderOpenTime()) {
t=주문오픈타임();
r=주문공개가격();
}
}
}
}
}
}
}
리턴(r);
}
}
'(' - 예기치 않은 함수 정의 D:\MT4\experts\indicators\Astrea.mq4 (627, 24)
'sy' - 정의되지 않은 변수 D:\MT4\experts\indicators\Astrea.mq4 (632, 7)
등.
나는 지표에서 거래 신호를 생성하는 논리를 구현하고 글로벌 변수 를 통해 EA에 주문 열기/청산을 위해 이미 형성된 신호를 보냅니다.
어떤 결정을 내리려면 주문의 개시 가격이 필요하므로 이 문제를 해결하려고 합니다. 내 표시기는 동적이며 데모에서만 또는 테스터에서 시각화 모드로 디버그할 수 있습니다.
전체 이익이 고려되지 않고 개별 주문의 이익이 고려되는 그림입니다.
BuyOrdProf=GetProfitOpenBuyPosInCurrency(OP_BUY); // 함수 호출
함수에 잘못된 매개변수가 전달되었습니다. 다음과 같아야 합니다.
함수에 잘못된 매개변수가 전달되었습니다. 다음과 같아야 합니다.
함수 호출에서 기호에 앵커를 추가해도 도움이 되지 않습니다. 그는 왜 각 포지션에 대한 이익을 별도로 계산합니까(위 그림)?