artmedia70 : 예... Aleksey, Roman 스타일로 작성되었다면 방금 고객에게 준 807줄 Expert Advisor가 어떻게 생겼는지 상상할 수 있습니다 ... :))))
축하합니다! 질문에 대한 내 답변의 맥락에서, 즉 이 페이지의 내 마지막 게시물에서 내 게시된 코드를 고려한다면 아마도 807 라인 Expert Advisor가 어떻게 생겼는지에 대한 아이디어가 바뀔 것입니다. 특히 루프의 누락된 행, if 문 및 루프를 종료할 때 중괄호 안에 있는 많은 것들이 있는 전문가로부터 내 코드를 수정했습니다. 디버거가 제거되지 않은 것도 질문의 맥락에 있으며 이에 대한 내 대답인 IMHO는 정상입니다.
저에게 이 디자인은 평범합니다. 이것은 주문하는 Expert Advisor가 아니라 질문에 대한 답변이며 OrderDelete() 대신 단어로 작성할 수도 있습니다. 여기에 주문 삭제 및 가능한 오류 처리를 위한 함수 호출을 삽입하십시오. 그 사람이 기다리고 있고, 나는 내 코드를 열고, 편집 후 공백의 존재 여부에 주의를 기울이지 않고 모든 "불필요한"을 제거하고, 그의 거래에 따라 그의 고문에게 추가로 연결할 수 있도록 작업 버전을 제공했습니다. 정황. 모든 것이 정상 범위, IMHO 내에 있다고 생각합니다. 다음은 악몽에 대한 질문에 대한 동일한 섹션입니다.
....
orderProfit = OrderProfit () + OrderSwap (); // Profit
Price = OrderOpenTime (); // Цена открытия рыночного ордера
SL = OrderStopLoss (); // Значение StopLoss ордера
TP = OrderTakeProfit (); // Значение TakeProfit ордераif (ticket> 0 ) // Если позиция открылась
{
while ( OrderSelect (ticket,SELECT_BY_TICKET)==false) // Если ордер выбран
{
Sleep ( 100 );
}
double OpenPrice= OrderOpenPrice ();
//---------------------Запоминаем значения сл и тп ордера// При количестве итераций выше 3-х увеличиваем уровень ТР для выхода в профит. if (orderType == OP_BUY)
{
//if (Iteration == 4 ) TakeProfitPips = 400; if (Iteration >= 5 ) TakeProfitPips = 500;
V_StopLossPips = NormalizeDouble (OpenPrice - (StopLossPips * Point ), Digits );
V_TakeProfitPips = NormalizeDouble (OpenPrice + (TakeProfitPips * Point ), Digits );
}
if (orderType == OP_SELL)
{
//if (Iteration == 4 ) TakeProfitPips = 400; if (Iteration >= 5 ) TakeProfitPips = 500;
V_StopLossPips = NormalizeDouble (OpenPrice + (StopLossPips * Point ), Digits );
V_TakeProfitPips = NormalizeDouble (OpenPrice - (TakeProfitPips * Point ), Digits );
}
}
// Проверка на предельную просадкуdouble loss = - ((orderProfit * 100.0 ) / AccountBalance ());
if (loss > MaxLoss)
{
Print ( "MaxLoss" );
CloseAllOrders(MagicNumber);
IsExpertFailed = true;
return ( 0 );
}
// Проверка на необходимость закрытия открытой позиции (ордера) по стоп-лоссу if ( V_StopLossPips != 0 )
{
if (orderType == OP_BUY && Bid <= V_StopLossPips)
{
CloseAllOrders(MagicNumber); Print ( "V_StopLossPips закрываем по сл = " , V_StopLossPips);
}
if ( OrderType ()== OP_SELL && Ask >= V_StopLossPips)
{
CloseAllOrders(MagicNumber); Print ( "V_StopLossPips закрываем по сл = " , V_StopLossPips);
}
}
// Проверка на необходимость закрытия открытой позиции (ордера) по тейкуif ( V_TakeProfitPips != 0 )
{
if (orderType == OP_BUY && Bid >= V_TakeProfitPips)
{
CloseAllOrders(MagicNumber); Print ( "V_TakeProfitPips закрываем по ТР = " , V_TakeProfitPips);
}
if ( OrderType ()== OP_SELL && Ask <= V_TakeProfitPips)
{
CloseAllOrders(MagicNumber); Print ( "V_TakeProfitPips закрываем по ТР = " , V_TakeProfitPips);
}
}
//-----------------------------------ВЫВОДИМ ТЕКУЩУЮ ИНФОРМАЦИЮ О ТОРГАХ НА ЭКРАН------------------------------------------------------------ string messageLoss = "" ;
if (orderProfit < 0.0 )
{
messageLoss = "Просадка = " + DoubleToStr (loss, 1 ) + "% (макс. " + MaxLoss + "%)" ;
}
// Вывод текущего состоянияComment ( "Прибыль = " , DoubleToStr (orderProfit, 1 ), " (лот " , orderLots, ") " , messageLoss, " Iteration= " , Iteration, " Sum_Loss + Delta= " , MathAbs (Sum_Loss) + Delta_Sum_Loss * 10 * orderLots, " Ширина канала = " , StopLossPips, " Профит по рыночному ордеру = " , orderProfit, " k = " , k);
return ( 0 );
}
Comment ( "" );
컴팩트함은 가독성 을 떨어뜨립니다. 사실, 정의를 위해, 당신이 논리를 무시하더라도 로마의 버전도 완전히 좋지 않습니다.
라인 절약의 요점은 무엇입니까?
이 모든 것이 각 개인의 중독의 본질이며 무엇이 더 편리하고 무엇이 그렇지 않은가를 결정하는 것은 공허합니다 ...
나에게 가장 중요한 것은 각 라인이 평소의 위치에 있어야 하고 더 이상 없어야 한다는 것입니다. 나머지도 마찬가지지만 내 재량에 따라야 합니다.
아시다시피 맛과 색을 위한 펠트펜은 없습니다.
하지만 확인하기 위해... 팬케이크는 인코더의 끔찍한 꿈입니다.
예... Aleksey, Roman 스타일로 작성되었다면 방금 고객에게 준 807줄 Expert Advisor가 어떻게 생겼는지 상상할 수 있습니다 ... :))))
하지만 확인하기 위해... 팬케이크는 인코더의 끔찍한 꿈입니다.
저에게 이 디자인은 평범합니다. 이것은 주문하는 Expert Advisor가 아니라 질문에 대한 답변이며 OrderDelete() 대신 단어로 작성할 수도 있습니다. 여기에 주문 삭제 및 가능한 오류 처리를 위한 함수 호출을 삽입하십시오. 그 사람이 기다리고 있고, 나는 내 코드를 열고, 편집 후 공백의 존재 여부에 주의를 기울이지 않고 모든 "불필요한"을 제거하고, 그의 거래에 따라 그의 고문에게 추가로 연결할 수 있도록 작업 버전을 제공했습니다. 정황. 모든 것이 정상 범위, IMHO 내에 있다고 생각합니다.
다음은 악몽에 대한 질문에 대한 동일한 섹션입니다.
아시다시피 맛과 색을 위한 펠트펜은 없습니다.
우리는 모두 너무 다르지만 여전히 우리는 함께입니다. ))) 우리는 하나의 공간 냄비에서 요리합니다. )))
우리는 모두 너무 다르지만 여전히 우리는 함께입니다. ))) 우리는 하나의 공간 냄비에서 요리합니다. )))
그런 술이 없어졌기 때문에(나는 내가 원하는 대로 코드를 작성한다/알고 있다), 나는 마지막 오이를 잘라낼 것이다:
나는 모든 "집행" 및 "입법" 기관을 별도의(여러 번 테스트한) 기능의 형태로 작성합니다.
그 기능과 능력은 나에게 잘 알려져 있기 때문에 코드 끝의 어딘가에 넣습니다.
start() 함수에서는 무엇에 효과가 있어야 하는지만 규정합니다.
나는 start() 만 읽었으며 모든 것이 즉시 명확합니다.
편리하게.
그런 술이 없어졌기 때문에(나는 내가 원하는 대로 코드를 작성한다/알고 있다), 나는 마지막 오이를 잘라낼 것이다:
나는 모든 "집행" 및 "입법" 기관을 별도의(여러 번 테스트한) 기능의 형태로 작성합니다.
그 기능과 능력은 나에게 잘 알려져 있기 때문에 코드 끝의 어딘가에 넣습니다.
start() 함수에서는 무엇에 효과가 있어야 하는지만 규정합니다.
나는 start() 만 읽었으며 모든 것이 즉시 명확합니다.
편리하게.
하지만 코드를 컴파일할 때 에러가 발생 하지 않는 것은 먼저 실행을 위한 함수를 작성하고 그 내용을 마지막에 어딘가에 작성하기 때문에 당연히 함수를 사용하지 않고 주석을 더 많이 사용하지만 그런 문제가 있습니다. 변수로
하지만 코드를 컴파일할 때 에러가 나지 않는 것은 먼저 실행을 위한 함수를 작성하고 그 내용을 마지막에 어딘가에 쓰기 때문에 당연히 함수를 사용하지 않고 주석을 더 많이 사용하지만 그런 문제가 있습니다. 변수로
이 경우 오류가 있을 수 없습니다.
컴파일할 때 일부 기능이 사용되지 않는다는 표시/알림만 있을 수 있습니다.
이 경우 눈을 감거나 이 사용하지 않는 기능을 삭제합니다.
하지만 코드를 컴파일할 때 에러가 나지 않는 것은 먼저 실행을 위한 함수를 작성하고 그 내용을 마지막에 어딘가에 쓰기 때문에 당연히 함수를 사용하지 않고 주석을 더 많이 사용하지만 그런 문제가 있습니다. 변수로
뭐야??? ))) 지금 농담하는 거지? 그렇다면 성공입니다.