Гогеттер Е.А. - страница 2

 
Maji:
По правде говоря, я не уверен, что смогу вам помочь. Во-первых, потому что для этого мне нужно потратить время, а оно у меня сейчас поджимает. Во-вторых, потому что до сих пор я позволял "индикаторам" делать все рисунки и никогда не использовал советников для этого. Это возможно, и я думаю, что теория та же самая.

Кажется, Codersguru написал главу о рисовании линий, стрелок и т.д. Попробуйте прочитать ее

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

Хорошо, вы меня поймали, я приму немного благодарности за тяжелую работу. TGIF!!! Я был одержим этим. Я заслужил перерыв.

Что касается рисования с помощью индикаторов... Мне не важно, КАК это делается (до определенного момента), главное, чтобы это было сделано... Если можно сделать индикатор, который наносит стрелки на график для открытия и закрытия, я думаю, это тоже сработает... Я обнаружил, что мой реальный счет рисует все в тестере сам по себе, без моих указаний... мой демо-счет, с другой стороны, ... имеет проблемы.

Меня больше волнует тайминг нескольких сделок... улучшится ли он, если я буду использовать "тиковый режим"? Я наблюдал за этим в форвард-тесте, и он делает одну сделку на бар, что может разнести сделки на довольно большое расстояние по пунктам после сигнала. Если я собираюсь открыть 5 позиций по сигналу, я хочу, чтобы это было в момент сигнала, а не через полчаса после него...(rolleyes).

 

Build 1.01 -longs

Это один сигнал, над которым я немного поработал, и который работает. Теперь есть некоторые различия с gogetshorts с используемыми скользящими средними и некоторой логикой сигнала... Я взял сигнал из оригинального gogetter, который работал на longs и немного поиграл с ним.

Больше всего ему нравится GPB/USD 5mTF. На других таймфреймах он практически не работает.

Наслаждайтесь, пожалуйста, публикуйте свои результаты/проблемы и т.д.

Файлы:
 
eric79:
Привет, поздравляю с красивой кривой. Я думаю, что одна вещь, которая может быть улучшена, это качество моделирования теста. 90% было бы лучше.

Я очень близок к этому на GGs 2.11.

Я не привык использовать номера версии и сборки... поскольку это мое первое предприятие... Это было добавлено Грэмом с форума factoid... это еще одна вещь, которую нужно отслеживать....these должны иметь текущие номера сборки и версии в окне графика теперь... та же логика и код просто лучше косметика.

Пока мы работаем над улучшениями, я даю им обоим возможность пройти предварительный тест в демо-версии.

Файлы:
 

Я бы все еще хотел разработать дополнительные сигналы входа и параметры в рамках этих...

 

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

мой советник в тестере стратегий теперь НЕ реагирует, когда я изменяю настройку 'maxopentrade'... он использует две сделки независимо от того, что, если я говорю ему "0", он все еще использует две сделки... он работал нормально раньше, даже сегодня, а теперь вдруг решил, что он собирается разрешить две открытые сделки все время, независимо от того, что я говорю ему.....

На прошлой неделе, если я говорил ему разрешить 5 сделок сразу, он разрешал 5 сделок сразу, а когда я говорил ему разрешить 1 сделку сразу, он разрешал одну сделку один раз.... Я видел, как это работает!

Теперь я не могу заставить его работать, чтобы спасти меня. Что случилось?

Я подумал, что, возможно, я потерял скобку или что-то в строке if MaxOpenTrade...

TradeSettings();

if (StopLossMode) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;

if (TakeProfitMode) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;

if(OrdersTotal() < MaxOpenTrade)

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);

if(Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("BUY order opened : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");

} else {

Print("Error opening BUY order : ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0); [/PHP]

so I changed it to this...

[PHP] TradeSettings();

if (StopLossMode) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;

if (TakeProfitMode) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;

if(OrdersTotal() < MaxOpenTrade){

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);

if(Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("BUY order opened : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");

} else {

Print("Error opening BUY order : ", GetLastError());

}

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

никаких улучшений, он по-прежнему игнорирует элемент управления MaxOpenTrade.

Хорошо, это поможет, если я буду отслеживать, какой сигнал из двух я меняю....lol если я использую только сигнал №2 и меняю настройки на сигнале №1, это имеет смысл, да?

да, я теряю голову.

 
for (int o = 0; o <= MaxOpenTrade; o ++)

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);

if(Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("BUY order opened : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");

return(0);

что это не делает, так это не изменяет ордера в одно и то же время... Я предполагаю, что мне нужно сделать что-то подобное с функцией модификации ордеров, чтобы они все модифицировались в одно и то же время...

 

Я не уверен, но не думаю, что это правильный способ сделать то, что вы хотите.

Используйте следующую функцию:

int CountTrades()

{

int count=0;

int trade;

for(trade=OrdersTotal()-1;trade>=0;trade--)

{

OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MagicNumber)

continue;

if(OrderSymbol()==Symbol()||OrderMagicNumber()==MagicNumber)

if((OrderType()==OP_SELL) || (OrderType()==OP_BUY))

count++;

}//for

return(count);

}

Теперь вызовите ее в вашей программе следующим образом

if CountTrades<MaxTrades then....

Кроме того, избавьтесь от привычки считать в цикле "for" и используйте стиль обратного отсчета. Это будет полезно, когда вы пытаетесь закрыть сделки, и в целом приведет к более последовательному стилю кодирования.

Удачи.

 

Хорошо, я сделал это, я обновил все в GGlongs Ea с CountTrades() даже предыдущую вещь CloseAll(), которую вы сделали ранее, которая использовала OrdersTotal()... Так что ВСЕ в этой конкретной сборке теперь отсчитывается вниз вместо отсчета вверх, я часто вызываю эту функцию.

EA теперь, кажется, работает нормально, чтобы открыть несколько ордеров одновременно и s/l их или t/p их в то же время ...

модификация их с другой стороны.... это иррационально и не модифицирует их все одновременно...

for (int t = 0; t < MaxOpenTrade; t ++)

if(CountTrades() < MaxOpenTrade)

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);

return(0);

if (!EachTickMode) BarCount = Bars;

[/PHP]

something about this doesn't work right...however when I do this although it becomes crazy it ends up being more profitable...

this is the code for the 'altered' version that corresponds to the test reports below...when it's like this basically it doesn't modify anything at all....

//Trailing stop for long position

if(TrailingStopMode && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > Point * TrailingStop || OrderOpenPrice() - Bid >= 0) { //below trigger the Ilevel==Ask

if(OrderStopLoss() < Bid - Point * TrailingStop || OrderStopLoss() == 0) {

for (int t = 0; t < MaxOpenTrade; t ++)

if(CountTrades() < MaxOpenTrade)

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);

return(0);

if (!EachTickMode) BarCount = Bars;

TrailingStopMode = False; //resets mode after each order

StopLossMode = False; //resets mode after each order

continue;

this is the code that corresponds to the 'unaltered' reports below... This modifys but not as I imagine it should doing them all at the same time....

[PHP]//Trailing stop for long position

if(TrailingStopMode && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > Point * TrailingStop || OrderOpenPrice() - Bid >= 0) { //below trigger the Ilevel==Ask

if(OrderStopLoss() < Bid - Point * TrailingStop || OrderStopLoss() == 0) {

//for (int t = 0; t < MaxOpenTrade; t ++)

//if(CountTrades() < MaxOpenTrade)

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);

//return(0);

if (!EachTickMode) BarCount = Bars;

TrailingStopMode = False; //resets mode after each order

StopLossMode = False; //resets mode after each order

continue;

Хотя мне не нравится, как это модифицирует согласно отчету, это, тем не менее, намного более выгодно.....

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

 

Теперь, теперь, теперь... вы зашли так далеко... так что подумайте хорошенько... у вас есть код counttrades, так почему бы не модифицировать его, чтобы он делал модификацию ордеров... что-то вроде этого...

int ModifyTrades()

{

int trade;

for(trade=OrdersTotal()-1;trade>=0;trade--)

{

OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MagicNumber)

continue;

if(OrderSymbol()==Symbol()||OrderMagicNumber()==MagicNumber)

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen); /etc.

}//for

}

У вас есть основы, и теперь вам предстоит разобраться с остальным.

Удачи.

 
Maji:
Теперь, теперь, теперь... вы зашли так далеко... так что подумайте хорошенько... у вас есть код counttrades, так почему бы не модифицировать его, чтобы он делал модификацию ордеров... что-то вроде этого...

int ModifyTrades()

{

int trade;

for(trade=OrdersTotal()-1;trade>=0;trade--)

{

OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MagicNumber)

continue;

if(OrderSymbol()==Symbol()||OrderMagicNumber()==MagicNumber)

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen); /etc.

}//for

}

Вы изучили основы, и теперь вам предстоит разобраться с остальным.

Удачи.

Это работает... см. прикрепленный...

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

Файлы: