[ARCHIVE!] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 4. - 페이지 411

 
sergeev :

아니요


여기서 문제는 루프일 뿐입니다. 열거 는 0에서 2로 진행되지만 2에서 0으로 필요합니다.



예시를 보여주세요
 for (i = OrdersTotal (); i > 0 ; i--)
도움이 되지 않았다
 

sss2019 :



예시를 보여주세요, 제가 해냈습니다 도움이 되지 않았습니다


나는 이렇게 스크립트를 만들었다.

 int orderstotal = OrdersTotal ();
         for (i = 0 ; i < orderstotal; i++ )
                {
                 if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == FALSE) break ;
                 if ( OrderSymbol () == Symbol () && OrderMagicNumber () == MagicNumber)
                        {
                         if ( OrderType () == OP_BUY)
                         if ( OrderClose ( OrderTicket (), OrderLots (),Bid,Slippage) == false)
                                {
                                 Print ( GetLastError ());
                                }
                         if ( OrderType () == OP_SELL)
                         if ( OrderClose ( OrderTicket (), OrderLots (),Ask,Slippage) == false)
                                {
                                 Print ( GetLastError ());
                                }
                         if ( OrderType () > 1 )
                         if ( OrderDelete ( OrderTicket ()) == false)
                                {
                                 Print ( GetLastError ());
                                }
                        }
                 Print (i, " " ,orderstotal);
                }

결과적으로 Print는 다음을 출력합니다.

0 4

십사

그게 다야, 어떤 이유로 사이클이 출력되지 않습니다

24

3 4

주기에 I 0 대신 OrderSelect (i, SELECT_BY_POS, MODE_TRADES)를 추가하여 첫 번째 주문이 항상 선택되고 스크립트가 작동하기 시작합니다.주기가 두 개의 주문을 삭제할 때 선택을 시도하는 것으로 나타났습니다. 목록에 두 개의 주문만 있는 경우 세 번째 주문.

 
sss2019 :


나는 이렇게 스크립트를 만들었다.

결국...

 
sss2019 :

예시를 보여주세요

 for (i = OrdersTotal (); i > 0 ; i--)

도움이 되지 않았다


생각하는 사람이 여전히 켜져 있어야 하기 때문에

 for (i = OrdersTotal () -1 ; i >= 0 ; i--)
 

이 딜레마를 해결하도록 도와주세요

 int i;
    double maxrange,range;
     double Ma1 = iMA ( Symbol (), Period (),FastMaPeriod, 0 , MODE_EMA , PRICE_OPEN ,i);
     double Ma2 = iMA ( Symbol (), Period (),SlowMaPeriod, 0 , MODE_EMA , PRICE_OPEN ,i);
   
                    while (Ma1 > Ma2)
                        {
                        i++;
                        Ma1 = iMA ( Symbol (), Period (),FastMaPeriod, 0 , MODE_EMA , PRICE_OPEN ,i);
                        Ma2 = iMA ( Symbol (), Period (),SlowMaPeriod, 0 , MODE_EMA , PRICE_OPEN ,i);
                        range = (Ma1 - Ma2)/Point;
                         if (range > maxrange) maxrange = range;
                        }

스크립트는 줄 사이의 최대 거리를 찾습니다. 결과에 따라 모든 막대에 모든 값을 표시했는데 한 막대에서 1.6235, 다른 막대에서 1.6208일 때 최대 거리는 얻어집니다.

인쇄(최대 범위)를 표시 하려고 합니다. 0.086을 표시합니다. 왜 그런지 전혀 이해하지 못합니다. 나는 Point by 나눗셈을 하고 있습니다

 
sss2019 :

이 딜레마를 해결하도록 도와주세요

스크립트는 줄 사이 의 최대 거리를 찾습니다. 결과에 따라 모든 막대에 모든 값을 표시했는데 한 막대에서 1.6235, 다른 막대에서 1.6208일 때 최대 거리는 얻어집니다.

Print(maxrange); 0.086을 표시합니다. 전혀 이해가 되지 않습니다. 포인트로 나눗셈을 하고 있습니다.


이것은 딜레마가 아닙니다. 딜레마는 두 솔루션 중 어느 것을 선택하는 것이 더 나은지 모를 때입니다.

음, 첫째, iMA() 함수에는 6개가 아니라 7개의 매개변수가 있습니다. 둘째, 문자열 int i로 변수를 선언했습니다. 그리고 변수 i는 어디에도 값으로 초기화되지 않습니다. 결과적으로 0이거나 이전 활동의 셀에 남아 있는 RAM 셀의 정크를 포함합니다. 셋째, while 루프가 올바르게 구성되지 않았습니다. 글쎄, 초기화 후 변수 i가 0과 같다고 가정해 봅시다. Ma1 > Ma2라는 표현도 참이라고 가정합시다. 결과적으로 while(Ma1 > Ma2) 라인은 루프를 실행합니다. 루프의 다음 반복에서 (Ma1 > Ma2) 표현식이 더 이상 참이 되지 않고 루프가 중단됩니다. 변수 MA1 및 MA2에는 최대값인 거리가 포함되지 않습니다 . 최대값은 한 번이었습니다. 이 조건은 MA1이 이제 MA2보다 작거나 같다는 것만 보여줄 것입니다.

또한, maxrange 변수는 라인 범위 = (Ma1 - Ma2)/Point의 값으로만 초기화됩니다. 글쎄요, if(range > maxrange) 조건이 실행되지 않는다면 어떻게 될까요? 왜냐하면 코드의 어느 곳에서도 maxrange 변수를 값으로 초기화하지 않기 때문입니다. 계산 결과와 RAM 셀의 쓰레기를 비교하고 있음이 밝혀졌습니다. 여기에 코드 실행의 결과로 이해할 수 없는 인쇄가 있습니다.

 
따라서 문제의 사실은 사이클의 모든 MA 값의 출력을 수행했으며 모든 값이 올바르게 표시된다는 것입니다. 즉, 이 기간 동안의 모든 MA 값이 정렬되었습니다. 그러나 어떤 이유로 여기 범위 = (Ma1 - Ma2)/Point에서 계산이 잘못되었습니다.
if(범위 > 최대 범위) 최대 범위 = 범위;
[삭제]  
sss2019 :
따라서 문제의 사실은 사이클의 모든 MA 값의 출력을 수행했으며 모든 값이 올바르게 표시된다는 것입니다. 즉, 이 기간 동안의 모든 MA 값이 정렬되었습니다. 그러나 어떤 이유로 여기 범위 = (Ma1 - Ma2)/Point에서 계산이 잘못되었습니다.
if(범위 > 최대 범위) 최대 범위 = 범위;

*가리키다

범위 = (Ma1 - Ma2) *포인트





 
pako :

*가리키다

범위 = (Ma1 - Ma2) *포인트

MA1 = 0.6526, MA2 = 0.6516. MA1-MA2 = 0.6526-0.6516 = 0.0010. 포인트 = 0.0001. 곱하면 당구대가 생깁니다. 0.0010 * 0.0001 = 0.0000001
 
sss2019 :
따라서 문제의 사실은 사이클의 모든 MA 값의 출력을 수행했으며 모든 값이 올바르게 표시된다는 것입니다. 즉, 이 기간 동안의 모든 MA 값이 정렬되었습니다. 그러나 어떤 이유로 여기 범위 = (Ma1 - Ma2)/Point에서 계산이 잘못되었습니다.
if(범위 > 최대 범위) 최대 범위 = 범위;

그래서 입력에 도착하는 것을 확인하는 것이 필요합니다. 계산에 관련된 변수의 값은 정확히 무엇입니까?