Советник Wall Street RоВоt

Taras2008

Местный знаток
Taras у тебя в настройках спред 4, рекомендуемый не более 2 для пары евро/бакс, для остальных не более 3. Из-за спреда такая высокая просадка.

Я знаю. На ДЦ спред 3. На остальных парах сливает.
 
Последнее редактирование:

SLAWA3

Заблокирован
Слава, пока вопросы такие:
1. Что с замечанием
http://forexsystemsru.com/sovetniki/63198-wall-street-rovot-19.html#post261394
"В советнике WSFR... в функциях ModifyOrders() и CloseOrders() есть грубые ошибки.
В них вызываются функции GetLastError(), OrderTicket() и OrderType() не
в цикле, а один раз ДО цикла перебора всех ордеров."
Я так понимаю, что работает там правильно, но в логи выводится неверно?
Если так, нельзя ли поправить?
2. Насчет ваших доливочных ордеров по рынку. Скажем, открылся первый по условию сравнения с основным. А по каким условиям открываются следующие? Кто для следующего "основной"? Как регулируется их лот (я смотрю, он для каждой доливки уменьшается? а может увеличиваться? )
И как ограничить число таких ордеров?
3. "extern bool AccountOrder =FALSE;//--- учёт ордеров при откр. дополнительных. если =true то учитывает только основной если =false то все "
Это где и для чего "учитывается"?
4. "extern int MaxAnalizCount = 50; //--- Число закрытых ранее ордеров для анализа(Используется при RecoveryMode = True)"
Какой анализ? Для чего?
5. Почему-то не показывает индюки и всякие веселые картинки в левом верхнем. А должен? Или это из-за выходных? поставил HideTestIndicators(FALSE);[/QUOTE]
[lang=af]


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

ну теперь посмотрю ошибки про которые вы написали - в функциях..если конечно есть таковые...[/lang]

просмотрел... в обоих ф-ях полностью весь код в цикле. начиная с else { после селектора и принта и заканчивая последней скобкой }...


вас не затруднит - то буду признателен если вставите в сообщение строки с ошибками из кода...

если вы про этот блок то это не вызов а обозначение ( задание ) переменных !

bool TicketClose; //--- Закрытие ордера
int total = OrdersTotal() - 1;
int OpenLongOrdersCount = 0;
int OpenShortOrdersCount = 0;
int MaxCount = 3;
int CloseError = GetLastError();
int CloseTicketID = OrderTicket();
string CloseOrderType = OrderType();
 
Последнее редактирование:

misi1

Активный участник
Привет! 3.8.6.1,НАЧАТЬ 50USD, Спасибо!

Bars in test 1961 Ticks modelled 185393 Modelling quality 90.00%
Mismatched charts errors 1

Kezdo betet 50.00
Osszes netto profit 343.55 Brutto profit 343.55 Brutto veszteseg 0.00
Profit tenyezo Vart eredmeny 13.74
Teljes visszaeses 27.00 Maximalis lehivas 64.27 (29.21%) Relative drawdown 66.18% (45.00)

Osszes kereskedes 25 Short poziciok (won %) 14 (100.00%) Long poziciok (won %) 11 (100.00%)
Nyereseges kereskedesek (az osszes %-a) 25 (100.00%) Veszteseges kereskedesek (az osszes %-a) 0 (0.00%)
Legnagyobb Nyereseges ugylet 114.91 Veszteseges ugylet 0.00
Atlag Nyereseges ugylet 13.74 Veszteseges ugylet 0.00
Maximum egymast koveto sikeres ugyletek (a profit penzben) 25 (343.55) egymast koveto veszteseges ugyletek (a veszteseg penzben) 0 (0.00)
Maximalis egymast koveto profit (a nyeresegek szama) 343.55 (25) egymast koveto vesztesegek (a vesztesegek szama) 0.00 (0)
Atlag egymast koveto nyeresegek 25 egymast koveto vesztesegek 0


imageshack.us/photo/my-images/199/strategytester50usddepo.gif

imageshack.us/photo/my-images/585/strategytester.gif
 

komissar73

money never sleeps
slawa4 ты не знаешь как изменить в мт4 спред на выходные?
Для тестирования был второй терминал, с дуру взял и обновил данные.:loss:
 

SLAWA3

Заблокирован

SLAWA3

Заблокирован
Коллеги кто знает как пользоваться прогой TakeMySpread v1.2, чтобы изменить
спред.
[lang=af]для начала отключить терминал от сети ( напр изменить последнюю цифру счёта ) выключить терминал.. включить прогу тейк май спред . нажать внизу дир... выбрать папку с терминалом в нём папку с нужной историей и инструментом напр евра усд.. и далее вписать спред и нажать писать и .. после этого включить терминал не забыв изменённую цифру поставить и тестить ... без подключения к сети .[/lang]
 

SLAWA3

Заблокирован
bool TicketClose; //--- Закрытие ордера
int total = OrdersTotal() - 1;
int OpenLongOrdersCount = 0;
int OpenShortOrdersCount = 0;
int MaxCount = 3;
int CloseError = GetLastError();
int CloseTicketID = OrderTicket();
string CloseOrderType = OrderType();[/QUOTE]
если вы про этот блок то это не вызов а обозначение ( задание ) переменных !
двойное их переназначение ( до цикла по одному и в самом цикле по другому) считаю излишним ... ( хоть и возможным )
 
Последнее редактирование:

komissar73

money never sleeps
[lang=af]для начала отключить терминал от сети ( напр изменить последнюю цифру счёта ) выключить терминал.. включить прогу тейк май спред . нажать внизу дир... выбрать папку с терминалом в нём папку с нужной историей и инструментом напр евра усд.. и далее вписать спред и нажать писать и .. после этого включить терминал не забыв изменённую цифру поставить и тестить ... без подключения к сети .[/lang]
Slawa4 спасибо, разобрался.
Коллеги для тех кто пользуется версией WSFR-3.8.6_3 выкладываю сет
для пары евра/бакс альпари микро 3.
За этот год со 100 баксов до 2000 при просадке 13%. Для тех кому 13% просадки много просто уменьшите ММ с 10 до нужного вам процента.
Сет проходит с 1999 года.
Всем профитов на следующей неделе.
 
Последнее редактирование:

darfs

Активный участник
bool TicketClose; //--- Закрытие ордера
int total = OrdersTotal() - 1;
int OpenLongOrdersCount = 0;
int OpenShortOrdersCount = 0;
int MaxCount = 3;
int CloseError = GetLastError();
int CloseTicketID = OrderTicket();
string CloseOrderType = OrderType();
если вы про этот блок то это не вызов а обозначение ( задание ) переменных !
двойное их переназначение ( до цикла по одному и в самом цикле по другому) считаю излишним ... ( хоть и возможным )[/QUOTE]
=======================================================
Я так понял, что ошибка может быть такая:
void ModifyOrders() {

bool TicketModify; //--- Закрытие ордера
int total = OrdersTotal() - 1;
int ModifyError = GetLastError();
int ModifyTicketID = OrderTicket();
string ModifyOrderType = OrderType();

В цикле в Print используются эти переменные из этой шапки, но тут ордер еще не выбран. А в цикле выбираются все новые ордера, но переменные в Print остаются эти же?...
if (!TicketModify)
if (WriteDebugLog) Print("Произошла ошибка во время модификации ордера (", ModifyOrderType, ",", ModifyTicketID, "). Причина: ", ErrorDescription(ModifyError));
 

SLAWA3

Заблокирован
Я так понял, что ошибка может быть такая:
void ModifyOrders() {


if (!TicketModify)
if (WriteDebugLog) Print("Произошла ошибка во время модификации ордера (", ModifyOrderType, ",", ModifyTicketID, "). Причина: ", ErrorDescription(ModifyError));[/QUOTE]


if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (WriteDebugLog) Print("Произошла ошибка во время выборки ордера. Причина: ", ErrorDescription(ModifyError));
вот же принт стоит ... уже после селектора...

исправьте у себя как сочтёте нужным( если считаете это необходимым...никто же не мешает перенести int ModifyTicketID = OrderTicket(); и string ModifyOrderType = OrderType(); в цикл после else { ) я так просто не вижу в этом надобности ...( в исправлениях с двойным переназначением переменных )
да и в самом принте не вижу необходимости тут... я бы так вообще сделал по другому...
 
Последнее редактирование:

darfs

Активный участник
Слава, спасибо за ответ. Уточнения:
последняя моя версия WSFR_D ... версия с тралом чисто для пробы по чьей то просьбе...
Надеюсь, что WSFR_Dtral включает код из WSFR_D, и можно далее работать с WSFR_Dtral (отлаживать трал и тп) ? Или какую версию вы будете далее модифицировать?

2. Насчет ваших доливочных ордеров по рынку. Скажем, открылся первый по условию сравнения с основным. А по каким условиям открываются следующие? Кто для следующего "основной"? Как регулируется их лот (я смотрю, он для каждой доливки уменьшается? а может увеличиваться? )
И как ограничить число таких ордеров?

3. "extern bool AccountOrder =FALSE;//--- учёт ордеров при откр. дополнительных. если =true то учитывает только основной если =false то все "
Это где и для чего "учитывается"?

учёт ордеров в условиях просадки ордера...
в одном случае учитывается только ордер открытый по первому сигналу ( главный )
в другом - любой ордер с просадкой превышающей настр.
Правильно я понял, что AccountOrder, хотя расположена вдали от доливок, именно к ним относится?
Если AccountOrder = TRUE, то откроется только один доп ордер при просадке основного на OrderDOP ? И далее при любой просадке основного и дополнительного ничего не будет происходить?
Если AccountOrder = FALSE, то к основному ордеру все равно откроется
только 1 дополнительный при просадке OrderDOP? А к дополнительному может открыться только еще один дополнительный при просадке OrderDOP?
И так далее - на каждый ордер не более одного дополнительного?
Но если просадка будет продолжаться, количество дополнительных
ордеров ничем не ограничено? Как остановить этот процесс? - Нужен лимит на число доп ордеров, или как?

анализ и восстановление это так же операции что в исходнике...
Это про что речь? Про то, как вычисляются (уменьшаются) объемы доп ордеров? Так же, как при в фирменной версии для RecoveryMode = TRUE? Или как? И какие параметры в нашем случае доливок надо задавать
для вычисления объемов доп ордеров?
 

darfs

Активный участник
Я так понял, что ошибка может быть такая:
void ModifyOrders() {


if (!TicketModify)
if (WriteDebugLog) Print("Произошла ошибка во время модификации ордера (", ModifyOrderType, ",", ModifyTicketID, "). Причина: ", ErrorDescription(ModifyError));[/QUOTE]


if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (WriteDebugLog) Print("Произошла ошибка во время выборки ордера. Причина: ", ErrorDescription(ModifyError));
вот же принт стоит ... уже после селектора...

исправьте у себя как сочтёте нужным( если считаете это необходимым...) я так просто не вижу в этом надобности ...( в исправлениях с двойным переназначением переменных )
да и в самом принте не вижу необходимости тут... я бы так вообще сделал по другому...

Я про то, что в Print вроде бы используется одни и те же значения
ModifyError ModifyTicketID ModifyOrderType, определенные 1 раз в шапке void ModifyOrders() { и не меняющиеся при переборе ордеров OrderSelect
 

darfs

Активный участник
Я так понял, что ошибка может быть такая:
void ModifyOrders() {


if (!TicketModify)
if (WriteDebugLog) Print("Произошла ошибка во время модификации ордера (", ModifyOrderType, ",", ModifyTicketID, "). Причина: ", ErrorDescription(ModifyError));


if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (WriteDebugLog) Print("Произошла ошибка во время выборки ордера. Причина: ", ErrorDescription(ModifyError));
вот же принт стоит ... уже после селектора...

исправьте у себя как сочтёте нужным( если считаете это необходимым...никто же не мешает перенести int ModifyTicketID = OrderTicket(); и string ModifyOrderType = OrderType(); в цикл после else { ) я так просто не вижу в этом надобности ...( в исправлениях с двойным переназначением переменных )
да и в самом принте не вижу необходимости тут... я бы так вообще сделал по другому...[/QUOTE]
Да, спасибо за подтверждение ошибки. Я уже ответил на предыдущую версию вашего письма, где не было еще части этой информации...
А как можно лучше сделать по-другому? (Сразу постараюсь по другому и переделать -- если смогу... )
 

SLAWA3

Заблокирован

Вложения

  • WSFR_D1.mq4
    62,2 КБ · Просмотры: 210

darfs

Активный участник
Slawa4 спасибо, разобрался.
Коллеги для тех кто пользуется версией WSFR-3.8.6_3 выкладываю сет
для пары евра/бакс альпари микро 3.
За этот год со 100 баксов до 2000 при просадке 13%. Для тех кому 13% просадки много просто уменьшите ММ с 10 до нужного вам процента.
Сет проходит с 1999 года.
Всем профитов на следующей неделе.
Спасибо за сет!
Вот прогнал у себя в тестере на демо-счете Альпари - см аттач
Начальный депозит 10000.00 Чистая прибыль 77326.18 Общая прибыль 113457.48 Общий убыток -36131.30
Максимальная просадка 10996.21 (27.23%) Относительная просадка 27.23% (10996.21)
То есть прибыль в 3 раза ниже, просадка в 2 раза выше.
Чем это может быть вызвано, подскажите? Спасибо.
 

Вложения

  • Komissar73-20110717-eur_usd_wsfr_3.8.6_3-darfsAlpariDemo.zip
    31,5 КБ · Просмотры: 145

SLAWA3

Заблокирован
А как можно лучше сделать по-другому? (Сразу постараюсь по другому и переделать -- если смогу... )[/QUOTE]

убрать значения переменных оставив ток их назначение а в цикле проставить значения..( приравнять уже к чему то соответственно )
 

darfs

Активный участник
А как можно лучше сделать по-другому? (Сразу постараюсь по другому и переделать -- если смогу... )

убрать значения переменных оставив ток их назначение а в цикле проставить значения..( приравнять уже к чему то соответственно )[/QUOTE]

Вот сделал вариант. Если так и нужно, могу сделать и CloseOrders
и выслать обе в файле, чтоб Tab не сбивался
Только, вроде в последней версии Пирата эти принты были убраны -
может намеренно, чтоб лог не засорять?
Еще вопрос - а для трала изменятся эти функции?... Если да, то сразу
надо переписать?....


//+--------------------------------------------------------------------------------------------------------------+
//| ModifyOrders. Модификация ордеров в безубыток. (Правил darfs 2011-07-17)
//+--------------------------------------------------------------------------------------------------------------+
void ModifyOrders() {
//+--------------------------------------------------------------------------------------------------------------+

bool TicketModify; //--- Закрытие ордера
int total = OrdersTotal() - 1;
int ModifyError ;
int ModifyTicketID ;
int ModifyOrderType ;
//---
for (int i = total; i >= 0; i--) { //--- Счетчик открытых ордеров
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
ModifyError = GetLastError();
if (WriteDebugLog)
Print("Произошла ошибка во время выборки ордера N ",i," Причина: ", ErrorDescription(ModifyError));

} else {
ModifyTicketID = OrderTicket();
ModifyOrderType = OrderType();
if (ModifyOrderType == OP_BUY) {
if (OrderMagicNumber() == MagicNumber||OrderMagicNumber() == MagicNumber1 && OrderSymbol() == EASymbol&&OrderStopLoss()==0) {
TicketModify = OrderModify(OrderTicket(), OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()- StopLoss*Point*K,Digits), NormalizeDouble(OrderOpenPrice()+TakeProfit*Point*K,Digits), 0, Blue);
if (!TicketModify) {
ModifyError = GetLastError();
if (WriteDebugLog)
Print("Произошла ошибка во время модификации ордера BUY - установки TP и SL(", ModifyTicketID, "). Причина: ", ErrorDescription(ModifyError));
}
}
}
if (ModifyOrderType == OP_SELL) {
if (OrderMagicNumber() == MagicNumber||OrderMagicNumber() == MagicNumber1 && OrderSymbol() == EASymbol&&OrderStopLoss()==0) {
TicketModify = OrderModify(OrderTicket(), OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()+ StopLoss*Point*K,Digits), NormalizeDouble(OrderOpenPrice()-TakeProfit*Point*K,Digits), 0, Blue);
if (!TicketModify) {
ModifyError = GetLastError();
if (WriteDebugLog)
Print("Произошла ошибка во время модификации ордера SELL - установки TP и SL(", ModifyTicketID, "). Причина: ", ErrorDescription(ModifyError));
}
}
}
//--- Модификация ордера на покупку
if (ModifyOrderType == OP_BUY) {
if (OrderMagicNumber() == MagicNumber||OrderMagicNumber() == MagicNumber1 && OrderSymbol() == EASymbol) {
if (Bid - OrderOpenPrice() > SecureProfitTriger * pp && MathAbs(OrderOpenPrice() + SecureProfit * pp - OrderStopLoss()) >= Point) {
//--- Модифицируем ордер
TicketModify = OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(OrderOpenPrice() + SecureProfit * pp, Digits), OrderTakeProfit(), 0, Blue);
if (!TicketModify){
ModifyError = GetLastError();
if (WriteDebugLog)
Print("Произошла ошибка во время модификации ордера BUY - перенос в безубыток (", ModifyTicketID, "). Причина: ", ErrorDescription(ModifyError));
}
}
}
} //--- Закрытие if (OrderType() == OP_BUY)

//--- Модификация ордера на продажу
if (ModifyOrderType == OP_SELL) {
if (OrderMagicNumber() == MagicNumber||OrderMagicNumber() == MagicNumber1 && OrderSymbol() == EASymbol) {
if (OrderOpenPrice() - Ask > SecureProfitTriger * pp && MathAbs(OrderOpenPrice() - SecureProfit * pp - OrderStopLoss()) >= Point) {
//--- Модифицируем ордер
TicketModify = OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(OrderOpenPrice() - SecureProfit * pp, Digits), OrderTakeProfit(), 0, Red);
if (!TicketModify){
ModifyError = GetLastError();
if (WriteDebugLog)
Print("Произошла ошибка во время модификации ордера SELL - перенос в безубыток (", ModifyTicketID, "). Причина: ", ErrorDescription(ModifyError));
}
}
}
} //--- Закрытие if (OrderType() == OP_SELL)
} //--- Закрытие else {
} //--- Закрытие for (int i = total - 1; i >= 0; i--)
}
 
Последнее редактирование модератором:

darfs

Активный участник
Я так понял, что ошибка может быть такая:
void ModifyOrders() {

изменил . вставил в цикл тип и тикет ну и ещё что то добавил ... что то подчистил ...
Выше, выслал скорректированный вариант вашей функции....

Но проблема в том, что я хочу пробовать трал, а в этой версии
программы его нет...

см также выше
http://forexsystemsru.com/showthread.php?p=278926#post278887
Спасибо!
 
Последнее редактирование:

SLAWA3

Заблокирован
[lang=af]bool TicketModify; //--- Закрытие ордера
int total = OrdersTotal() - 1;
int ModifyError ;
int ModifyTicketID ;
string ModifyOrderType ;
//---
for (int i = total; i >= 0; i--) { //--- Счетчик открытых ордеров
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
ModifyError = GetLastError(); // это перед принтами что ниже как у вас но можно и их выкинуть...
ModifyTicketID = OrderTicket();
ModifyOrderType = OrderType();
if (OrderType() == OP_BUY) { .............

так давайте тоже выкинем эти никчёмные принты...
я чичас с чужого компа ( нет эксперта на нём ) так что целиком файл эксперта без принтов выложить не могу.. буду дома - выложу... и заодно прикручу трал чуть покорректнее чем в пробных версиях с тралом... ток на мой взгляд от него толку - чуть ![/lang]
 
Последнее редактирование:
Верх