edyuson: Как зделать, чтоб не сразу умножал, а скажем через два-три раза? Пример: лот=0,01, еще - 0,01, еще - 0,01 и только после умножать. Подскажите, если не много возни. Спасибо.
세르게예프 :
int 카운터를 만들고 열 때마다 +1을 추가하십시오.
원하는 카운터 값을 입력한 후 이미 및 lot*koef가 수행하도록 허용합니다.
네, 생각보다 쉽지 않습니다. 이제 현실이 되기 시작했습니다. 그리고 주기: lot-0.01, lot-0.01, lot-0.01 및 lot-0.02, lot-0.02, lot-0.02를 곱한 후에만 추가: lot-0.04, lot -0.04, lot-0.04 ....가 중단되어야 합니다. 이익으로, 그리고 무스를 계속하십시오. 다른 포럼에는 다음과 같은 옵션이 있었습니다. Double koef[]={ 1.0, 2.0, 1.0, 1.0, 1.0, 2.0, 1.0, 1을 선언할 수 있습니다. 0, 1.0, 2.0 .......} - 배열로 필요한 계수로 채우고 정적 또는 전역 변수 int k=0; 그러면 lot=lot*koef[k++]; 시리즈 시작: k=0;
그리고 이것들: 정수 k = 1; 정수 값 = 3; if (k/koef == k) { lot*=2; k++; } 하지만 그게 아닙니다.
시도 유형 카운터: int j; for(j=0; j<15; j++) , 그러나 다시는 아닙니다. 예, 여기에 모든 것이 있습니다. intX=0; 이중 S = 0.0000; 외부 이중 로트 = 0.01; 외부 이중 계수 = 2.0; 외부 int SL=30; 외부 정수 TP=120; 더블 DL; 이중; 정수 초기화() { a=많다; 리턴(0); } 정수 초기화() { 리턴(0); }
if(OrdersTotal() == 0 && 닫기[1]<열기[1]) { dl=닫기[0]; OrderSend(Symbol(),OP_SELL,lot,Bid,3,Bid+SL*0.0001,Bid-TP*0.0001,"",14774,0,Red); // 어떤 종류의 haler가 여기에 있어야 합니다 . 아마도 당신이 도울 수 있을 것입니다. lot=lot*koef;
감사합니다. 하지만 두 가지 가격이 있습니다. 하나는 주문 개시 가격 이고 다른 하나는 손절매 가격입니다. 손절매 포인트 수와 포인트 가격은 알려져 있습니다. 그리고 손실이 예를 들어 가격이 정지 손실에 도달하면 보증금의 10%와 같도록 로트 크기를 계산하는 방법은 무엇입니까? 저는 숫자에 약해요.
그리고 나는 아직도 이해하지 못한다.
교차 환율의 경우 달러로 표시되는 핍 값은 다음 공식을 사용하여 계산됩니다. PIP = LOT_SIZE * TICK_SIZE * BASE_QUOTE / CURRENT_QUOTE, 여기서 LOT_SIZE는 로트 크기, TICK_SIZE는 눈금 크기, BASE_QUOTE는 미국 달러에 대한 기본(첫 번째) 통화 의 현재 시세, CURRENT_QUOTE는 해당 쌍의 현재 시세입니다.
미국 달러에 대한 기본(첫 번째) 통화 - GBP 에서 JPY로 - GBP/JPY의 예에서 GBP/USD 가 됩니다.
자본의 양과 손절매의 크기에 따라 거래에서 포지션의 거래량을 계산할 때 필요한 이 스크립트를 재설계했습니다.
당신에게 필요합니다 - "나는 문제에 부딪쳤고 3 일 동안 나는 고군분투했고 나는 그것을 해결할 수 없었습니다. 완성 된 조언자에서 나는 많은 대신에 % 위험을 입력하기로 결정 했으므로 계산해야합니다. 중지까지의 로트, 예를 들어 창고가 10,000이고 중지가 100pp인 경우 위험은 1%이고 중지가 200이면 로트가 이미 0.05여야 다음을 수행할 수 있습니다. 1%가 같은 수준에 머무를 위험이 있다. 모든 것을 명확하게 설명했으면 좋겠다"고 말했다. 여기에 다음과 같이 씁니다.
" 예를 들어 가격이 손절매에 도달하면 보증금의 10%와 같도록 로트 크기를 계산하는 방법은 무엇입니까? 숫자에 너무 촉박합니다."
일반적으로 나는 교과서에서 로트 계산 기능 을 다시 수정했습니다. 설명과 접근 방식은 동일합니다. 예금 가치의 백분율로 로트를 계산하는 대신 거래 된 로트가 정확히 귀하에 따라 계산됩니다 (제가 제공한 이 예에서 - 위 링크의 스크립트 참조) 조건:
externstring A0 = "Параметры ММ и мониторинга" ;
externdouble Lots = 0 ; // Стартовый лот = 0 для использования максимального риска на капитал в процентах, в зависимости от величины стоп-лоссаexternint StopLoss = 1000 ;
externint TakeProfit = 4000 ; // TakeProfit для новых ордеров (пунктов)externdouble MaxRisk = 10 ; // риск на капитал в %// рассчитываем объем позиции взависимости от размера стопа, при заданном риске// например при депо 10 000 риск 1% при стопе 100 пп это будет примерно лот 0.1,// при стопе 200 пп уже лот должен быть 0.05, для того чтобы риск 1% остался на том же уровнеint start()
{
//----------------------------------СТАРТ-------------------------------------------------------------------------------------
// ...
//----------------------------------Расчет объема лота------------------------------------------------------------------------ if (Lot(StopLoss)==false)
{
Comment ( " Пополните счет. Не хватает средств на минимальный лот. Советник остановлен." ); // Если средств не хватает на мин, то выходPrint ( "Не хватает средств на минимальный лот. Lots_New = " ,Lots_New, " AccountFreeMargin() = " , AccountFreeMargin ());
// Если средств не хватает на мин, то выходreturn ( 0 );
}
// ---------НОРМАЛИЗУЕМ НОВЫЕ РАСЧЕТНЫЕ ЛОТЫ И ОТКРЫВАЕМ ОЧЕРЕДНУЮ ПОЗИЦИЮ...
Lots_New = NormalizeLots(Lots_New);
//... здесь условия на открытие поз и установка ордеров
} //------------------------------------------Конец Старт-----------------------------------------------------//+------------------------------------------------------------------+//| Нормализация лота |//+------------------------------------------------------------------+double NormalizeLots( double lot)
{
double lotStep = MarketInfo ( Symbol (), MODE_LOTSTEP);
double lots = NormalizeDouble (lot / lotStep, 0 ) * lotStep;
lots = MathMax (lots, MarketInfo ( Symbol (), MODE_MINLOT));
lots = MathMin (lots, MarketInfo ( Symbol (), MODE_MAXLOT));
return (lots);
}
//--------------------------------------------------------------------// Lot.mqh// //--------------------------------------------------------------- 1 --// Функция вычисления количества лотов.// Глобальные переменные:// double Lots_New - количество лотов для новых ордеров (вычисляется)// double Lots - желаемое количество лотов, заданное пользовател.// double MaksRisk - процент риска// Возвращаемые значения:// true - если средств хватает на минимальный лот// false - если средств не хватает на минимальный лот//--------------------------------------------------------------- 2 --bool Lot( int sl) // Позовательская ф-ия
{
string Symb = Symbol (); // Финансовый инструм.double One_Lot= MarketInfo (Symb,MODE_MARGINREQUIRED); //Стоим. 1 лотаdouble Min_Lot= MarketInfo (Symb,MODE_MINLOT); // Мин. размер. лотовdouble Max_Lot = MarketInfo ( Symbol (),MODE_MAXLOT);
double Step = MarketInfo (Symb,MODE_LOTSTEP); //Шаг изменен размераdouble Free = AccountFreeMargin (); // Свободные средстваdouble LotVal = MarketInfo ( Symbol (),MODE_TICKVALUE); //стоимость 1 пункта для 1 лота//--------------------------------------------------------------- 3 --if (Lots > 0 ) // Лоты заданы явно..
{ // ..проверим этоdouble Money=Lots*One_Lot; // Стоимость ордераif (Money<= AccountFreeMargin ()) // Средств хватает..
Lots_New=Lots; // ..принимаем заданноеelse// Если не хватает..
Lots_New= MathFloor (Free/One_Lot/Step)*Step; // Расчёт лотов
}
//--------------------------------------------------------------- 4 --else// Если лоты не заданы
{ // то берём процент // Желаем. колич.лотов:
Lots_New = MathFloor ((Free*MaxRisk/ 100 )/(sl*LotVal)/Step)*Step;
if (Lots_New<Min_Lot) Lots_New=Min_Lot;
if (Lots_New>Max_Lot) Lots_New=Max_Lot;
Print ( "Lot_New в ф-ии Lots = " ,Lots_New, "ширина канала = " ,sl, "Point = " , Point );
}
//--------------------------------------------------------------- 5 --if (Lots_New < Min_Lot) // Если меньше допуст..
Lots_New=Min_Lot; // .. то миниамальныйif (Lots_New*One_Lot > AccountFreeMargin ()) // Не хватает даже..
{ // ..на минимальн. лот:(Print ( "Не хватает средств на минимальный лот. Lots_New = " ,Lots_New, " AccountFreeMargin() = " , AccountFreeMargin ()); // Сообщение..return (false); // ..и выход
}
return (true); // Выход из польз. ф-ии
}
//--------------------------------------------------------------- 6 --
edyuson :
세르게예프 :Как зделать, чтоб не сразу умножал, а скажем через два-три раза? Пример: лот=0,01, еще - 0,01, еще - 0,01 и только после умножать. Подскажите, если не много возни. Спасибо.
int 카운터를 만들고 열 때마다 +1을 추가하십시오.
원하는 카운터 값을 입력한 후 이미 및 lot*koef가 수행하도록 허용합니다.
네, 생각보다 쉽지 않습니다. 이제 현실이 되기 시작했습니다. 그리고 주기: lot-0.01, lot-0.01, lot-0.01 및 lot-0.02, lot-0.02, lot-0.02를 곱한 후에만 추가: lot-0.04, lot -0.04, lot-0.04 ....가 중단되어야 합니다. 이익으로, 그리고 무스를 계속하십시오. 다른 포럼에는 다음과 같은 옵션이 있었습니다. Double koef[]={ 1.0, 2.0, 1.0, 1.0, 1.0, 2.0, 1.0, 1을 선언할 수 있습니다. 0, 1.0, 2.0 .......} - 배열로 필요한 계수로 채우고 정적 또는 전역 변수 int k=0;
그러면 lot=lot*koef[k++]; 시리즈 시작: k=0;
그리고 이것들:
정수 k = 1;
정수 값 = 3;
if (k/koef == k) { lot*=2; k++; } 하지만 그게 아닙니다.
시도 유형 카운터: int j;
for(j=0; j<15; j++)
, 그러나 다시는 아닙니다. 예, 여기에 모든 것이 있습니다.
intX=0;
이중 S = 0.0000;
외부 이중 로트 = 0.01;
외부 이중 계수 = 2.0;
외부 int SL=30;
외부 정수 TP=120;
더블 DL;
이중;
정수 초기화()
{
a=많다;
리턴(0);
}
정수 초기화()
{
리턴(0);
}
정수 시작()
{
if(OrdersTotal() == 0 && X==1)
{
if (닫기[0]>dl){lot=a;}
X=0;
}
if(OrdersTotal() == 0 && X==2)
{
if (닫기[0]<dl){lot=a;}
X=0;
}
if (OrdersTotal() == 0 && 닫기[1]>열기[1])
{
dl=닫기[0];
OrderSend(Symbol(),OP_BUY,lot,Ask,3,Ask-SL*0.0001,Ask+TP*0.0001,"",14774,0,Blue);
//------------------------------------------------ --------------------
lot=lot*koef;
X=1;
}
if(OrdersTotal() == 0 && 닫기[1]<열기[1])
{
dl=닫기[0];
OrderSend(Symbol(),OP_SELL,lot,Bid,3,Bid+SL*0.0001,Bid-TP*0.0001,"",14774,0,Red);
// 어떤 종류의 haler가 여기에 있어야 합니다 . 아마도 당신이 도울 수 있을 것입니다.
lot=lot*koef;
X=2;
}
}
리턴(0);
//이제 마틴일 뿐입니다.
감사합니다. 하지만 두 가지 가격이 있습니다. 하나는 주문 개시 가격 이고 다른 하나는 손절매 가격입니다. 손절매 포인트 수와 포인트 가격은 알려져 있습니다. 그리고 손실이 예를 들어 가격이 정지 손실에 도달하면 보증금의 10%와 같도록 로트 크기를 계산하는 방법은 무엇입니까? 저는 숫자에 약해요.
그리고 나는 아직도 이해하지 못한다.
교차 환율의 경우 달러로 표시되는 핍 값은 다음 공식을 사용하여 계산됩니다.
PIP = LOT_SIZE * TICK_SIZE * BASE_QUOTE / CURRENT_QUOTE,
여기서 LOT_SIZE는 로트 크기, TICK_SIZE는 눈금 크기, BASE_QUOTE는 미국 달러에 대한 기본(첫 번째) 통화 의 현재 시세, CURRENT_QUOTE는 해당 쌍의 현재 시세입니다.
미국 달러에 대한 최초의 통화를 이해하는 방법은 무엇입니까?
네... 꽉... :-)
미국 달러에 대한 기본(첫 번째) 통화 - GBP 에서 JPY로 - GBP/JPY의 예에서 GBP/USD 가 됩니다.
자본의 양과 손절매의 크기에 따라 거래에서 포지션의 거래량을 계산할 때 필요한 이 스크립트를 재설계했습니다.
당신에게 필요합니다 - "나는 문제에 부딪쳤고 3 일 동안 나는 고군분투했고 나는 그것을 해결할 수 없었습니다. 완성 된 조언자에서 나는 많은 대신에 % 위험을 입력하기로 결정 했으므로 계산해야합니다. 중지까지의 로트, 예를 들어 창고가 10,000이고 중지가 100pp인 경우 위험은 1%이고 중지가 200이면 로트가 이미 0.05여야 다음을 수행할 수 있습니다. 1%가 같은 수준에 머무를 위험이 있다. 모든 것을 명확하게 설명했으면 좋겠다"고 말했다. 여기에 다음과 같이 씁니다.
" 예를 들어 가격이 손절매에 도달하면 보증금의 10%와 같도록 로트 크기를 계산하는 방법은 무엇입니까? 숫자에 너무 촉박합니다."
일반적으로 나는 교과서에서 로트 계산 기능 을 다시 수정했습니다. 설명과 접근 방식은 동일합니다. 예금 가치의 백분율로 로트를 계산하는 대신 거래 된 로트가 정확히 귀하에 따라 계산됩니다 (제가 제공한 이 예에서 - 위 링크의 스크립트 참조) 조건:
이 방법을 시도했습니다. 이제 전체 테스트 기간 동안 하나의 보류 중인 STOPLOSS 주문이 열렸습니다. 그게 다야 ... 아마도 내 터미널이 버그가 있습니까?
이론적으로 프로그램은 매일 아침 7시부터 9시까지 높은 가격과 낮은 가격을 찾아 이 수준에서 정지 주문을 해야 합니다.
이 방법을 시도했습니다. 이제 전체 테스트 기간 동안 하나의 보류 중인 STOPLOSS 주문이 열렸습니다. 그게 다야 ... 아마도 내 터미널이 버그가 있습니까?
안녕하세요.
기능에 문제가 있는 사람이 있습니까?
IsDemo ()
?
계정이 실제인지 여부에 관계없이 계정이 실제라는 1개의 결과를 지속적으로 제공합니다.
안녕하세요.
기능에 문제가 있는 사람이 있습니까?
?
계정이 실제인지 여부에 관계없이 계정이 실제라는 1개의 결과를 지속적으로 제공합니다.
데모 계정의 코드와 함께 차트에 고문을 배치했습니다.
잡지에 "이것은 데모입니다."라고 씁니다.데모 계정의 코드와 함께 차트에 고문을 배치했습니다.
잡지에 "이것은 데모입니다."라고 씁니다.나는 fibogroups에 대한 데모를 가지고 있습니다. 신비한 이유로 내가 실생활에 있다고 말합니다. 묘사된 버전에서 - 이것은 데모가 아닙니다.
DC 자체가 어떻게 든 변태 된 것으로 밝혀졌습니다.
나는 fibogroups에 대한 데모를 가지고 있습니다. 신비한 이유로 내가 실생활에 있다고 말합니다. 묘사된 버전에서 - 이것은 데모가 아닙니다.
DC 자체가 어떻게 든 변태 된 것으로 밝혀졌습니다.
일부 브로커는 데모와 실제 모두에 대해 하나의 서버를 할당합니다. 브로커의 지원에서 지정하십시오.
고맙습니다.