artmedia70 : 주문에 대한 데이터로 "채워진" 직후 어레이에 포함된 내용을 이해하고 확인합니까? 아니요. 당신은 모른다, 당신은 단지 추측. pr()이 아니라 표준 Print()가 아닌 배열의 모든 셀의 내용을 인쇄 해제하고 테스터 로그를 살펴보고 배열 직후에 배열의 각 셀에 무엇이 있는지 확인하십시오. 채우는. 그 때 배열의 내용이 내용에 대한 생각과 일치하는지 확인한 다음 pr()을 사용하여 인쇄합니다. 동일한 결과를 제공하지 않으면 pr()에 데이터가 일치하고 다음 단계에서 오류를 추가로 찾으십시오.
인쇄된 배열이지만 현재로서는 배열에 관한 것이 아닙니다. 아래에서 제 생각을 설명하겠습니다.
그런데. 모든 결론을 표준 인쇄물로 옮겼습니다. 상황은 동일합니다. +에서 4개 포지션이 닫히는 순간이 있습니다. 그런 다음 논리적으로 isCloseByTakeLastOpenPos() 함수는 시작 시 작동해야 합니다. 이 함수는 처음부터 다음과 같이 호출합니다.
for ( int ord= OrdersTotal ()- 1 ; ord>= 0 ; ord--)
{
if (! OrderSelect (ord,SELECT_BY_POS)) continue ;
if (OrderMagicNumber() != i_magic) continue ;
if (OrderSymbol() != Symbol ()) continue ;
if (OrderType() == 6 ) continue ;
g_ticket = OrderTicket();
g_type = OrderType();
// Блок модификации ордеров if (i_sl != 0 || i_tp != 0 )
{
if (OrderStopLoss() == 0 && OrderTakeProfit() == 0 )
{
OrdersModifyer(g_ticket);
}
}
// Закрытие всех ордеров, если последний ордер закрытif (isCloseByTakeLastOpenPos( 2 )) // Наша функция, определяющая.. закрылся ли последний закрытый ордер в + или нет.
{
// if (g_type < 2)
{
ClosePosBySortLots();
}
//elseif (g_type > 1 && g_type < 6 )
{
DeletePendingOrders(g_ticket);
}
}
}
마지막으로 마감된 주문이 테이크 또는 이익으로 마감되었음을 알려줍니다. 기능은 다음과 같습니다.
//+-------------------------------------------------------------------------------------+//| Получаем состояние последней позиции (Открыта или закрыта) |//+-------------------------------------------------------------------------------------+bool isCloseByTakeLastOpenPos( int delta)
{
datetime lastOrderCloseTime = - 1 , // Время закрытия последнего открытого ордера
lastOOTHist = - 1 ; // Время открытия последнего открытого ордера из историиint j = - 1 ;
Print ( "isCloseByTakeLastOpenPos: вошли в функцию" );
for ( int i=OrdersHistoryTotal()- 1 ; i>= 0 ; i--)
{
if (! OrderSelect (i, SELECT_BY_POS, MODE_HISTORY)) continue ;
if (OrderMagicNumber() != i_magic) continue ;
if (OrderSymbol() != Symbol ()) continue ;
if (OrderType() > 1 ) continue ; // Все удалённые отложки нас не интересуют..Print ( "isCloseByTakeLastOpenPos: первоначальные условия выполнены!" );
if (lastOrderCloseTime < OrderCloseTime()) // Находим время закрытия..
{
lastOrderCloseTime = OrderCloseTime(); // ..последней закрытой позиции в истории
j = i;
Print ( "j = " + j + " " + TimeToStr( TimeCurrent ()));
}
}
if ( OrderSelect (j, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderProfit() + OrderCommission() + OrderSwap() <= 0 ) return ( false );
// pr ("OTP() = " + OrderTakeProfit() + "; OCP() " + OrderClosePrice() + " " + TimeToStr(TimeCurrent()));// pr ("OOP() = " + OrderOpenPrice() + "; OCP() " + OrderClosePrice() + " " + TimeToStr(TimeCurrent()));if ( MathAbs (OrderTakeProfit() - OrderClosePrice()) > delta * pt) return ( false );
else
{
lastOOTHist = OrderOpenTime();
Comment ( "\n" , "FUNC isCloseByTakeLastOpenPos: " ,
"\n" , "j = " , j,
"\n" , "lastOOTHist = " , TimeToStr(lastOOTHist, TIME_SECONDS));
}
}
else
{
Comment ( "\n" , "FUNC isCloseByTakeLastOpenPos: " ,
"\n" , "j = " , j,
"\n" , "не удалось выбрать ордер в истории" );
return ( false );
}
for ( int h= OrdersTotal ()- 1 ; h>= 0 ; h--)
{
if ( OrderSelect (h, SELECT_BY_POS, MODE_TRADES))
{
if (OrderMagicNumber() != i_magic) continue ;
if (OrderSymbol() != Symbol ()) continue ;
if (OrderType() > 1 ) continue ;
if (lastOOTHist < OrderOpenTime()) return ( false ); // Выбранная рыночная позиция открыта позже закрытой по тейку
}
else { Print ( "FUNC isCloseByTakeLastOpenPos : не удалось выбрать рыночный ордер" ); return ( false );}
}
Print ( "isCloseByTakeLastOpenPos: последняя закрытая позиция профитна!" );
return ( true );
}
상황이 흥미롭다. 모든 것이 작동합니다. 그리고 다음과 같은 상황이 발생합니다.
테이크 인 +를 위해 닫힌 4 포즈를 볼 수 있습니다. 그들은 teik에서 문을 닫았습니다. 저것들. 주문 마감 기능이 전혀 작동하지 않았습니다. 그 과정에서 이유는 폐쇄 조건이 작동하지 않았다는 사실에 있습니다. 이:
if (isCloseByTakeLastOpenPos( 2 ))
이 기능을 살펴보고 모든 것을 인쇄하면 현재로서는 사실이 아님이 분명해집니다. 어때요? 결국 +의 마지막 4개 주문이 마감되었습니다. 위에서 함수 코드를 제공했습니다. 동시에 로그에 있는 내용은 다음과 같습니다.
2013.09.09 00:13:232013.08.15 12:35 Perevorot EURUSD.GI,M5: OpenPendingSell(): Ордер послать не удалось 0
2013.09.09 00:13:232013.08.15 12:35 Perevorot EURUSD.GI,M5: OpenPendingSell(): Ордер послать не удалось 0
2013.09.09 00:13:232013.08.15 12:35 Perevorot EURUSD.GI,M5: OpenPendingSell(): Ордер послать не удалось 0
2013.09.09 00:13:232013.08.15 12:35 Perevorot EURUSD.GI,M5: OpenPendingSell(): Ордер послать не удалось 0
2013.09.09 00:13:232013.08.15 12:35 Perevorot EURUSD.GI,M5: OpenPendingSell(): Ордер послать не удалось 0
2013.09.09 00:13:042013.08.15 12:30 Tester: take profit #104 at 1.32731 (1.32722 / 1.32724)
2013.09.09 00:13:042013.08.15 12:30 Tester: take profit #102 at 1.32731 (1.32722 / 1.32724)
2013.09.09 00:13:042013.08.15 12:30 Tester: take profit #100 at 1.32731 (1.32722 / 1.32724)
2013.09.09 00:13:042013.08.15 12:30 Tester: take profit #98 at 1.32731 (1.32722 / 1.32724)
2013.09.09 00:13:032013.08.15 12:30 Tester: order #104, sell 0.93 EURUSD.GI is opened at 1.32831
2013.09.09 00:13:032013.08.15 12:30 Perevorot EURUSD.GI,M5: isCloseByTakeLastOpenPos: первоначальные условия выполнены!
2013.09.09 00:13:032013.08.15 12:30 Perevorot EURUSD.GI,M5: isCloseByTakeLastOpenPos: первоначальные условия выполнены!
2013.09.09 00:13:032013.08.15 12:30 Perevorot EURUSD.GI,M5: isCloseByTakeLastOpenPos: первоначальные условия выполнены!
2013.09.09 00:13:032013.08.15 12:30 Perevorot EURUSD.GI,M5: isCloseByTakeLastOpenPos: первоначальные условия выполнены!
그것이 작동하는 방식입니다... 감사합니다!
내 버전이 작동하지 않는 이유를 이해하기 위해 ...
차이점이 보이지 않습니까? 당신은 잘못된 비교를했습니다.
if (&& b < c) - 불가능
if (a<c && b<c) - 그래서 당신은 할 수 있습니다
차이점이 보이지 않습니까? 당신은 잘못된 비교를했습니다.
if (&& b < c) - 불가능
if (a<c && b<c) - 그래서 당신은 할 수 있습니다
아니요, 차이점을 발견했습니다. 나는 만약 (&& b < c)...라고 굳게 믿었습니다. :-)
이제 알겠습니다. 감사합니다!
아니요, 차이점을 발견했습니다. 나는 만약 (&& b < c)...라고 굳게 믿었습니다. :-)
이제 알겠습니다. 감사합니다!
다시 한번 감사합니다! 이제 "확인된" 막대의 수를 최적화하려고 했지만 창에 결과가 없습니다. 나는 처음부터 끝까지 세어보려고 애썼지만 허사였다.
"...창에 결과가 없습니다"은(는) 무슨 뜻인가요? 어떻게 든 결과를 창에 잘못 출력하고 프로그램 어딘가에 오류가 있습니까?
친애하는 동지들! 기술 분석을 기반으로 한 프로그래밍 라인에 대한 문헌(교과서)이 있는지 알려주십시오. 피보 수준. 가급적이면 "인형을 위한" 코드 예제를 사용합니다.
또는 누가 비슷한 오픈 소스 고문을 알려줄 것입니다.
미리 감사드립니다.
친애하는 동지들! 기술 분석을 기반으로 한 프로그래밍 라인에 대한 문헌(교과서)이 있는지 알려주십시오. 피보 수준. 가급적이면 "인형용" 코드 예제를 사용합니다.
또는 누가 비슷한 오픈 소스 고문을 알려줄 것입니다.
미리 감사드립니다.
주문에 대한 데이터로 "채워진" 직후 어레이에 포함된 내용을 이해하고 확인합니까? 아니요. 당신은 모른다, 당신은 단지 추측. pr()이 아니라 표준 Print()가 아닌 배열의 모든 셀의 내용을 인쇄 해제하고 테스터 로그를 살펴보고 배열 직후에 배열의 각 셀에 무엇이 있는지 확인하십시오. 채우는. 그 때 배열의 내용이 내용에 대한 생각과 일치하는지 확인한 다음 pr()을 사용하여 인쇄합니다. 동일한 결과를 제공하지 않으면 pr()에 데이터가 일치하고 다음 단계에서 오류를 추가로 찾으십시오.
인쇄된 배열이지만 현재로서는 배열에 관한 것이 아닙니다. 아래에서 제 생각을 설명하겠습니다.
그런데. 모든 결론을 표준 인쇄물로 옮겼습니다. 상황은 동일합니다. +에서 4개 포지션이 닫히는 순간이 있습니다. 그런 다음 논리적으로 isCloseByTakeLastOpenPos() 함수는 시작 시 작동해야 합니다. 이 함수는 처음부터 다음과 같이 호출합니다.
마지막으로 마감된 주문이 테이크 또는 이익으로 마감되었음을 알려줍니다. 기능은 다음과 같습니다.
상황이 흥미롭다. 모든 것이 작동합니다. 그리고 다음과 같은 상황이 발생합니다.
테이크 인 +를 위해 닫힌 4 포즈를 볼 수 있습니다. 그들은 teik에서 문을 닫았습니다. 저것들. 주문 마감 기능이 전혀 작동하지 않았습니다. 그 과정에서 이유는 폐쇄 조건이 작동하지 않았다는 사실에 있습니다. 이:
이 기능을 살펴보고 모든 것을 인쇄하면 현재로서는 사실이 아님이 분명해집니다. 어때요? 결국 +의 마지막 4개 주문이 마감되었습니다. 위에서 함수 코드를 제공했습니다. 동시에 로그에 있는 내용은 다음과 같습니다.
2013.09.09 00:13:23 2013.08.15 12:35 Perevorot EURUSD.GI,M5: OpenPendingSell(): Ордер послать не удалось 0
2013.09.09 00:13:23 2013.08.15 12:35 Perevorot EURUSD.GI,M5: OpenPendingSell(): Ордер послать не удалось 0
2013.09.09 00:13:23 2013.08.15 12:35 Perevorot EURUSD.GI,M5: OpenPendingSell(): Ордер послать не удалось 0
2013.09.09 00:13:23 2013.08.15 12:35 Perevorot EURUSD.GI,M5: OpenPendingSell(): Ордер послать не удалось 0
2013.09.09 00:13:23 2013.08.15 12:35 Perevorot EURUSD.GI,M5: OpenPendingSell(): Ордер послать не удалось 0
2013.09.09 00:13:04 2013.08.15 12:30 Tester: take profit #104 at 1.32731 (1.32722 / 1.32724)
2013.09.09 00:13:04 2013.08.15 12:30 Tester: take profit #102 at 1.32731 (1.32722 / 1.32724)
2013.09.09 00:13:04 2013.08.15 12:30 Tester: take profit #100 at 1.32731 (1.32722 / 1.32724)
2013.09.09 00:13:04 2013.08.15 12:30 Tester: take profit #98 at 1.32731 (1.32722 / 1.32724)
2013.09.09 00:13:03 2013.08.15 12:30 Tester: order #104, sell 0.93 EURUSD.GI is opened at 1.32831
2013.09.09 00:13:03 2013.08.15 12:30 Perevorot EURUSD.GI,M5: isCloseByTakeLastOpenPos: первоначальные условия выполнены!
2013.09.09 00:13:03 2013.08.15 12:30 Perevorot EURUSD.GI,M5: isCloseByTakeLastOpenPos: первоначальные условия выполнены!
2013.09.09 00:13:03 2013.08.15 12:30 Perevorot EURUSD.GI,M5: isCloseByTakeLastOpenPos: первоначальные условия выполнены!
2013.09.09 00:13:03 2013.08.15 12:30 Perevorot EURUSD.GI,M5: isCloseByTakeLastOpenPos: первоначальные условия выполнены!
2013.09.09 00:13:03 2013.08.15 12:30 Perevorot EURUSD.GI,M5: j = 74 2013.08.15 12:30
2013.09.09 00:13:03 2013.08.15 12:30 Perevorot EURUSD.GI,M5: isCloseByTakeLastOpenPos: первоначальные условия выполнены!
2013.09.09 00:13:03 2013.08.15 12:30 Perevorot EURUSD.GI,M5: isCloseByTakeLastOpenPos: вошли в функцию
2013.09.09 00:13:03 2013.08.15 12:30 Perevorot EURUSD.GI,M5: isCloseByTakeLastOpenPos: первоначальные условия выполнены!
2013.09.09 00:13:03 2013.08.15 12:30 Perevorot EURUSD.GI,M5: isCloseByTakeLastOpenPos: первоначальные условия выполнены!
조건이 성립하지 않는 것을 알 수 있습니다. 여기서 무슨 문제가 있습니까?
"...창에 결과가 없습니다"은(는) 무슨 뜻인가요? 어떻게 든 결과를 창에 잘못 출력하고 프로그램 어딘가에 오류가 있습니까?
그러나 나는 3.2와 1 막대를 비교하고 있습니다. 즉, 계산은 x >=1에 달려 있습니까?
그리고 계속한다는 것은 동일한 가격의 막대가 단순히 고려되지 않고 번호가 할당되지 않는다는 것을 의미합니까?
최적화 매개변수 설정: 시작 1, 1단계, 끝 4; H1 및 H4에서 결과 탭은 단순히 비어 있고 D1에서는 분석된 막대의 수가 다른 수익성이 동일합니다.
당신이 어디에도 없는 프로.
기능에 도움이 됩니다. 이는 긍정적인 주문 이전에 역사상 마지막으로 주문을 잃는 수를 계산합니다.
즉, 마이너스에서 마지막 3개 주문의 기록에서 플러스에서 1, 마이너스에서 2입니다.
여기에서 함수는 마지막 세 개를 계산해야 합니다(최대 더하기까지).