매직 넘버가 MM에서 추적될 수 있도록 알려주십시오. 코드에 " mn "을 올바르게 추가했습니까?
//+----------------------------------------------------------------------------------------+//| ММ Функция работает по принципу наращивания лота при увеличении |//| депозита, и уменьшении лота при серии убыточных сделок лот возвращается |//| на начальный лот в данном случае 0.1 если происходит профит то следующий |//| лот расчитывается по прогресии. |//| К примеру при депозите 500 старт лота будет равен 0.1 далее депозит |//| увеличивается до 5000 лот будет равен 1 если будет две убыточные сделки |//| лот уменьшится от предыдущего деленое на DecreaseFactor = 3, если по далее |//| две сделки будут убыточные,уменьшится от предыдущего деленое на DecreaseFactor = 3, |//| далее если сделка будет прибыльной то следующий лот откроется из расчета |//| баланса депозита "баланс/500*0.1"=лот внешние переменные |//+----------------------------------------------------------------------------------------+double LotsOptimized() {
double minlot = MarketInfo( Symbol (), MODE_MINLOT);
double maxlot = MarketInfo( Symbol (), MODE_MAXLOT);
double lot = Lots;
int orders = OrdersHistoryTotal();
int losses = 0 ;
lot = NormalizeDouble ((AccountFreeMargin()- AccountCredit()) * MaximumRisk / balans, 2 );
if (DecreaseFactor > 0.0 ) {
for ( int i = orders - 1 ; i >= 0 ; i--) {
if ( OrderSelect (i, SELECT_BY_POS, MODE_HISTORY) == FALSE) {
Print ( "Error in history!" );
break ;
}
if (OrderSymbol() != Symbol () || OrderType() > OP_SELL || OrderMagicNumber()!= mn ) continue ;
if (OrderProfit() > 0.0 ) break ;
if (OrderProfit() < 0.0 ) losses++;
}
if (losses > 1 ) lot = NormalizeDouble (lot - lot * losses / DecreaseFactor, 2 );
}
if (lot < minlot) lot = minlot;
if (lot > maxlot) lot = maxlot;
return (lot);}
그는 자신이 "최대 균형"의 순간부터 손실 거래를 계산해야 전체 손실보다 큰 이익에 도달했을 때 모든 수익성 있는 거래를 마감하고 새로운 저장소에서 이미 손실 거래를 새로 계산하기 시작합니다.
누군가 예금 잔액을 모니터링하는 고문을 만났을 수 있습니다. 예를 들어 거래가 50 잔액으로 시작되었습니다. 손실이 시작된 경우 고문은 잔액이 얼마나 감소했는지 기억해야 향후 이익이 발생했을 때 열린 위치의 수에 도달했습니다 이 손실보다 많으면 그는 모든 수익성 있는 거래를 닫고 손실을 다시 계산하기 시작해야 합니다.
if (GetProfitOpenPosInCurrency()>NumberOfLossPosToday())
int slippage= 1 ;
int ask, bid, open;
double point;
for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
{
if (! OrderSelect (i,SELECT_BY_POS,MODE_TRADES)) break ;
if (OrderType()==OP_BUY)
{
point=MarketInfo(OrderSymbol(),MODE_POINT);
if (point== 0 ) break ;
bid= MathRound (MarketInfo(OrderSymbol(),MODE_BID)/point);
open= MathRound (OrderOpenPrice()/point);
if (bid-open<Profit) continue ;
OrderClose(OrderTicket(),OrderLots(),bid*point,slippage);
}
if (OrderType()==OP_SELL)
{
point=MarketInfo(OrderSymbol(),MODE_POINT);
if (point== 0 ) break ;
ask= MathRound (MarketInfo(OrderSymbol(),MODE_ASK)/point);
open= MathRound (OrderOpenPrice()/point);
if (open-ask<Profit) continue ;
OrderClose (OrderTicket(),OrderLots(),ask*point,slippage);
}
}
}
//--------------------------------------------------------------------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);
}
//--------------------------------------------------------------------int NumberOfLossPosToday( string sy= "" , int op=- 1 , int mn=- 1 ) {
datetime t;
int i, k=OrdersHistoryTotal(), kp= 0 ;
if (sy== "0" ) sy= Symbol ();
for (i= 0 ; i<k; i++) {
if ( OrderSelect (i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol()==sy || sy== "" ) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op< 0 || OrderType()==op) {
if (mn< 0 || OrderMagicNumber()==mn) {
t=OrderCloseTime();
if (Year()==TimeYear(t) && DayOfYear()==TimeDayOfYear(t)) {
if (OrderProfit()< 0 ) kp++;
}
}
}
}
}
}
}
return (kp);
}
매직 넘버가 MM에서 추적될 수 있도록 알려주십시오. 코드에 " mn "을 올바르게 추가했습니까?
내가 설정할 수 있는 특정 시간에 어드바이저가 켜지도록 하는 임시 "조건"을 알려주세요.
매직 넘버가 MM에서 추적될 수 있도록 알려주십시오. 코드에 " mn "을 올바르게 추가했습니까?
Magic이 전역 변수 또는 상수로 선언된 경우:
int mn = ****;
따라서 구조적으로 오류가 없습니다(작은 구문 편집).
그리고 로트는 MODE_LOTSTEP의 다중도로 정규화되어야 합니다. 그렇지 않으면 조만간 오류 131(ERR_INVALID_TRADE_VOLUME)이 발생합니다.
글쎄, 함수에서 선언되지 않은 변수는 양심에 달려 있습니다 ... :)
여보세요,
전문가의 도움이 필요합니다...
아이디어를 실행에 옮기지도 못하고.. 다 찾아낸 것 같은데 로봇에 집어넣었지만 여전히 그렇게 되지는 않는다 =(
오류가 있는지 확인하십시오.
나는 총 손실보다 더 큰 총 이익에 도달할 때 모든 수익성 있는 포지션의 청산을 달성하고 싶습니다. 나는 그러한 조건을 만들려고 노력하고 있습니다 (Profit>Obytkov) 모든 수익성있는 포지션을 닫으십시오
코드를 도와주세요. 조건 실패(총 이익>총 손실) 모든 수익성 있는 거래를 닫습니다.
그는 자신이 "최대 균형"의 순간부터 손실 거래를 계산해야 전체 손실보다 큰 이익에 도달했을 때 모든 수익성 있는 거래를 마감하고 새로운 저장소에서 이미 손실 거래를 새로 계산하기 시작합니다.
누군가 예금 잔액을 모니터링하는 고문을 만났을 수 있습니다. 예를 들어 거래가 50 잔액으로 시작되었습니다. 손실이 시작된 경우 고문은 잔액이 얼마나 감소했는지 기억해야 향후 이익이 발생했을 때 열린 위치의 수에 도달했습니다 이 손실보다 많으면 그는 모든 수익성 있는 거래를 닫고 손실을 다시 계산하기 시작해야 합니다.
그리고 마지막 1-2-3 주문이 수익성이 없었는지 어떻게 알 수 있습니까?
그리고 일반적으로 마지막 주문이 무엇인지 확인하는 방법은 무엇입니까?
예를 들어 보류 중인 구매 한도가 작동했는지 확인하고 작동했다면 가격은 얼마인지 확인한 다음 새 한도를 설정해야 합니다.
후행 중지에 의해 주문이 실행되었는지 확인하고 후행이 실행된 후 새 주문을 하는 방법은 무엇입니까?