Как кодировать? - страница 97

 
matrixebiz:
Хорошо, я попробую, когда вернусь домой, но тогда почему он все еще работает с ордерами на покупку? Спасибо.

Вы можете находиться в ордере на продажу, но цена удовлетворяет условию для кода изменения стопа на покупку, поэтому она изменяется, и больше не удовлетворяет условиям для раздела на продажу, поэтому она не изменяется там.

Big Be

 

Спасибо Big Be за помощь, но я только что понял, что мой старый код действительно работает, но я должен включить использование StopLoss для ордеров SELL, чтобы получить модификацию...

Странно, что мне не нужно включать TakeProfit для MoveStopOnce, чтобы работать с ордером BUY, но я должен включить StopLoss для MoveStopOnce, чтобы модифицировать ордер SELL.

О, хорошо, мне придется посмотреть код немного глубже, чтобы понять это, если вы не знаете почему.

EDIT: если вы измените на;

if(0 < OrderOpenPrice() - Point * MoveStopTo) {

[/code]

instead of;

[code]

if(OrderStopLoss() < OrderOpenPrice() - Point * MoveStopTo) {

Кажется, работает хорошо.

Спасибо

 

Нужна помощь с калькулятором определения размера позиции

ОК,

Я строю калькулятор определения размера позиции как функцию, основанную на "формуле Келли"

(Win Rate-((1-Win Rate)/(Avg Win/Avg Loss)).

Я получил весь код и расчеты, работающие с ручным вводом (extern) для необходимых переменных, и теперь пытаюсь заставить функцию работать динамически, вызывая определенную информацию о счете (а именно, я хочу рассчитать коэффициент постоянства выигрышей (%), среднее количество пунктов на выигрышную сделку и среднее количество пунктов на проигрышную сделку).

Я мог бы использовать любую помощь в обеспечении работы трех функций (WinRate AvgWin и AvgLoss). Я уже несколько месяцев использую вариант с ручным вводом, и он отлично работает. Вот полный код для этой (автоматизированной) версии на данный момент... при тестировании я не получаю динамического вывода, все возвращается к настройкам по умолчанию (50, 40, 20). Я установил его как собственный советник для тестирования и легкой модулизации в любой существующий советник. После прикрепления к любому графику, вывод печатается в журнале/вкладке эксперта. Использование фракталов намеренно, чтобы использовать максимальный рост счета (или минимальные потери). как примечание, большинство брокеров, предлагающих платформу MT trader, позволяют фрактальную торговлю для мини или старших лотов. Это окажется полезным в будущем при управлении капиталом, которое может снимать позиции частичным лотом (т.е. снимать 25% от 1 лота). В любом случае...

Для того, чтобы собрать необходимую мне информацию о счете в реальном времени, я пытаюсь...

1. подсчитать все сделки

2. подсчитать прибыльные сделки

и т.д. и т.п.

Возможно, я делаю это правильно или нет.

Заранее спасибо за любую помощь...

SeaWolf

//+------------------------------------------------------------------+

//| KellyFormula.mq4 |

//+------------------------------------------------------------------+

#property copyright "seawolf"

#property link "seawolf"

//+------------------------------------------------------------------+

//| ВВОД ВНЕШНЕЙ ИНФОРМАЦИИ |

//+------------------------------------------------------------------+

extern int MyAccount = 1001; //------>>>> ID счета

extern int ExpertID = 500001; //------>>>> Магическое число для этого советника

extern double PipValue= 1.00; //------>>>> использовать для ВСЕХ расчетов

extern double LotCost= 50.0; //------>>>> использовать для ВСЕХ расчетов

extern double PercentMax= 24.0; //------>>>> максимальный % левериджа на счете за один раз

extern int TradesMax= 3; //------>>>> максимальное количество сделок (пример: 24%/3 сделки = 8% на сделку)

extern bool UseKelly= true; //------>>>> переключение на ручное управление

extern double ManualLots= 1.0; //------>>>> # лоты, если "UseKelly" false

extern double mWinRate= 50.00; //------>>>> постоянство выигрыша в % (ручное управление)

extern int mAvgWin= 40; //------>>>> среднее количество пунктов на одну выигрышную сделку (ручное управление)

extern int mAvgLoss= 20; //------>>>> avg # pips per lossing trade (manual overide)

//+------------------------------------------------------------------+

//| функция инициализации эксперта |

//+------------------------------------------------------------------+

int init()

{

//----

//----

return(0);

}

int deinit()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| функция запуска эксперта |

//+------------------------------------------------------------------+

int start()

{

//----

PositionSize();

{

Print("Lots=",PositionSize()," WinRate=",WinRate()," AvgWin=",AvgWin()," AvgLoss=",AvgLoss());

}

Comment("Текущее время ",TimeToStr(TimeCurrent(),TIME_MINUTES), "GMT ",TimeToStr(TimeCurrent(),TIME_DATE)," ... Win Rate= ",WinRate()," Avg Win= ",AvgWin()," Avg Loss= ",AvgLoss());

//----

return(0);

}

//----

//+------------------------------------------------------------------+

//| ВЫЧИСЛЯЕМ РАЗМЕР ПОЗИЦИИ ДЛЯ ВСЕХ НОВЫХ СДЕЛОК.

//+------------------------------------------------------------------+

//------------------------>>>>

double PositionSize()

{

//------------------------>>>> НЕ ИСПОЛЬЗОВАТЬ ФОРМУЛУ КЕЛЛИ, ИСПОЛЬЗОВАТЬ ПЛОСКУЮ СТАВКУ

if(UseKelly == true)

{

double KelyForm = WinRate()-((1-WinRate())/(AvgWin()/AvgLoss()));

double PerTrade;

double Lots;

if(KelyForm > PercentMax)

{

PerTrade = (PercentMax/10)/TradesMax;

}

else if(KelyForm < PercentMax)

{

PerTrade = (KelyForm/10)/TradesMax;

}

else if(KelyForm == PercentMax)

{

PerTrade = (KelyForm/10)/TradesMax;

}

Lots = (PerTrade * AccountBalance()/LotCost);

return(MathRound(Lots)/10);

}

}

//+------------------------------------------------------------------+

//| СОБИРАЕМ ИНФОРМАЦИЮ О СЧЕТЕ В РЕАЛЬНОМ ВРЕМЕНИ |

//+------------------------------------------------------------------+

//------------------------>>>>

double WinRate()

{

double Ticket;

double CountWins = 0;

for(Ticket=0;Ticket<OrdersTotal();Ticket++)

{

OrderSelect(Ticket,SELECT_BY_TICKET,MODE_HISTORY);

if(MyAccount==AccountNumber() && OrderSymbol()==Symbol() && OrderMagicNumber() == ExpertID)

{

//------>>>>

if(OrderType()==OP_BUY)

{

if(OrderClosePrice() >= OrderOpenPrice())

CountWins++;

}

else if(OrderType()==OP_SELL)

{

if(OrderClosePrice() <= OrderOpenPrice())

CountWins++;

}

}

}

if(CountWins > 0)

return(MathRound(CountWins/OrdersHistoryTotal())*10);

else

Print("WinRate в реальном времени недоступен");

return(mWinRate);

}

//------>>>>

//------------------------>>>>

double AvgWin()

{

double Ticket;

double CountTrades = 0;

double CountPips = 0;

for(Ticket=0;Ticket<OrdersTotal();Ticket++)

{

OrderSelect(Ticket,SELECT_BY_TICKET,MODE_HISTORY);

if(MyAccount==AccountNumber() && OrderSymbol()==Symbol() && OrderMagicNumber() == ExpertID)

{

//------>>>>

if(OrderType()==OP_BUY && OrderClosePrice()>=OrderOpenPrice())

CountTrades++;

{

if(OrderProfit() >= 0)

CountPips++;

}

if(OrderType()==OP_SELL && OrderClosePrice()<=OrderOpenPrice())

CountTrades++;

{

if(OrderProfit() >= 0)

CountPips++;

}

}

}

if(CountPips > 0)

return(MathRound(CountPips/CountTrades)*10);

else

Print("Функция AvgWin в реальном времени недоступна");

return(mAvgWin);

}

//------>>>>

//------------------------>>>>

double AvgLoss()

{

double Ticket;

double CountTrades = 0;

double CountPips = 0;

for(Ticket=0;Ticket<OrdersTotal();Ticket++)

{

OrderSelect(Ticket,SELECT_BY_TICKET,MODE_HISTORY);

if(MyAccount==AccountNumber() && OrderSymbol()==Symbol() && OrderMagicNumber() == ExpertID)

{

//------>>>>

if(OrderType()==OP_BUY && OrderClosePrice()<OrderOpenPrice())

CountTrades++;

{

if(OrderProfit() < 0)

CountPips++;

}

if(OrderType()==OP_SELL && OrderClosePrice()>OrderOpenPrice())

CountTrades++;

{

if(OrderProfit() < 0)

CountPips++;

}

}

}

if(CountPips > 0)

return(MathRound(CountPips/CountTrades)*10);

else

Print("Real Time AvgLoss not Available");

return(mAvgLoss);

}

//---------------------------------------------------------------------+

 

Для: Matrixebiz

EDIT: if you change to;

if(0 < OrderOpenPrice() - Point * MoveStopTo) {

[/code]

instead of;

[code]

if(OrderStopLoss() < OrderOpenPrice() - Point * MoveStopTo) {

Кажется, работает хорошо.

Спасибо

Пожалуйста.

Big Be

 

Fxpro, спросить

привет всем... я просто хочу спросить о том, как настроить лот советника в FxPro...

Я запутался, потому что у него 6 цифр (1 цифра дополнительная), я установил S/L и T/P, но я не могу изменить лот...

всегда 0.4 на сделку. Даже я меняю его на 0.1 или 0.3.

Я использовал советник 10points 3...

Пожалуйста, помогите мне... напишите мне на hansen_hardrocker@yahoo.co.id.

или можете написать в PM пожалуйста.

всем привет.

 

Ask_change Lot (fxpro)

Fxpro, спросить

привет всем... я просто хочу спросить о том, как настроить лот советника в FxPro...

Я запутался, потому что он имеет 6 цифр (1 цифра дополнительная) Я исправил S/L и T/P, но я не могу изменить лот...

всегда 0.4 на сделку. Даже я меняю его на 0.1 или 0.3.

Я использовал 10points 3 EA...

Пожалуйста, помогите мне... напишите мне на hansen_hardrocker@yahoo.co.id.

или можете написать в PM пожалуйста.

всем привет.

 

Я тоже хочу это. Пожалуйста, пришлите мне на omidchart@yahoo.com.

 

Возможно, это связано с тем, что в советнике включено управление капиталом.

 

Thx

matrixebiz:
Возможно, это потому, что у вас включено управление деньгами в советнике.

Спасибо, брат...

Я новичок...

 

Можете ли вы изменить этот советник?

Здравствуйте программисты,

У меня есть советник, который размещает стоп-ордера выше и ниже текущей цены. Мне нужен советник, который будет выставлять лимитные ордера вместо стоп-ордеров выше и ниже текущей цены. Можете ли вы изменить этот советник, чтобы он делал именно это, сохраняя все параметры прежними?

Заранее спасибо,

Пол

Файлы: