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

 

Проблема нелагзигзагообразного сигнала

Здравствуйте, kevin07,

Оповещения для nonlagzigzag работают, но они не соответствуют линии зигзага. Я получил несколько предупреждений, но линия зигзага не нарисовалась. Кроме того, когда я впервые загружаю индикатор, он выдает алерт. Не могли бы вы взглянуть на код и посмотреть, сможете ли вы обнаружить проблему? Оповещение по электронной почте также работает отлично, спасибо, что включили его. Все, что вы можете сделать, будет очень признательно.

С наилучшими пожеланиями, Том

 

nonlagzigzag

Здравствуйте tk748, Начальное оповещение, которое появилось при загрузке инди, сообщает о текущем направлении торговли с момента последнего максимума или минимума (который, возможно, произошел несколько свечей назад). Жаль слышать, что промежуточные оповещения выходят до того, как будет построена следующая линия. Оператор IF для оповещения может иметь дополнительный фильтр для проверки того, что CurrentDirection != PreviousDirection, чтобы дополнительные оповещения не появлялись до построения следующей линии. (Я занят доработкой своего советника и не могу сейчас этим заняться). Днем я должен работать. Ночью я должен спать. Без советника я не получу много (любых) сделок. Мой приоритет - использовать зигзаг или volitility indi в качестве фильтра, чтобы предотвратить открытие некоторых убыточных сделок.

Если я найду, как добавить этот дополнительный код в процесс, я дам вам знать.

С наилучшими пожеланиями, kevin07

 

Скрипт стрэддла

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

Как всегда... Я ценю вашу помощь!!!

#include

#include

#define LOOK_TO_BUY 1

#define LOOK_TO_SELL 2

extern int Magic_Number = 412625; // set this to a unique number if you intend to use the script simulataneously across many charts on the same account.

extern int UserDefinedSpread = 0; // set this to 0 if you want to use market spread. valid value is >= 0

extern double LotSize = 0.1;

extern int Slippage = 3;

extern int StopLoss = 25; // If you set StopLoss to 0, no stop loss level will be placed.

extern int TakeProfit = 0; // If you set TakeProfit to 0, no stop loss level will be placed.

extern bool OneCancelsOther = true; // This determines if you want the script to stay running and track, then delete the opposite pending order when an order has executed.

extern int NumOfCandles = 3; // This determines how many previous candles you want the EA to look for the High Lows. (buy and sell prices). valid value is > 0

extern int PositionalMarginPips = 40; // The distance excluding spread from the high lows for the opening prices. valid value is >= 0

extern int intervalseconds = 1.0; //The time interval for the script to check your trades. allows fractional seconds.

double BuyPrice = 0;

double SellPrice = 0;

int CustomSpread = 0;

bool KeepRunning = true;

int ticketToDelete = 0;

void GetPrices()

{

double HighestHigh = High[1];

if (NumOfCandles > 1)

{

for (int i=2; i<=NumOfCandles; i++)

{

if (High > HighestHigh)

{

HighestHigh = High;

}

}

}

BuyPrice = HighestHigh + (PositionalMarginPips * Point);

BuyPrice = NormalizeDouble(BuyPrice,Digits);

double LowestLow = Low[1];

if (NumOfCandles > 1)

{

for (i=2; i<=NumOfCandles; i++)

{

if (Low < LowestLow)

{

LowestLow = Low;

}

}

}

SellPrice = LowestLow - (PositionalMarginPips * Point);

BuyPrice = NormalizeDouble(BuyPrice,Digits);

}

void PlaceTrades()

{

double TakeProfitPrice, StopLossPrice;

if (TakeProfit==0)

{

TakeProfitPrice = 0;

}

else

{

TakeProfitPrice = BuyPrice + (TakeProfit * Point);

TakeProfitPrice = NormalizeDouble(TakeProfitPrice,Digits);

}

if (StopLoss == 0)

{

StopLossPrice = 0;

}

else

{

StopLossPrice = BuyPrice - (StopLoss * Point);

StopLossPrice = NormalizeDouble(StopLossPrice,Digits);

}

SendOrders (LOOK_TO_BUY, LotSize, BuyPrice, Slippage, StopLossPrice, TakeProfitPrice, "Straddle Buy", 0);

if (TakeProfit==0)

{

TakeProfitPrice = 0;

}

else

{

TakeProfitPrice = SellPrice - (TakeProfit * Point);

TakeProfitPrice = NormalizeDouble(TakeProfitPrice,Digits);

}

if (StopLoss == 0)

{

StopLossPrice = 0;

}

else

{

StopLossPrice = SellPrice + (StopLoss * Point);

StopLossPrice = NormalizeDouble(StopLossPrice,Digits);

}

SendOrders (LOOK_TO_SELL, LotSize, SellPrice, Slippage, StopLossPrice, TakeProfitPrice, "Straddle Sell", 0);

}

void SendOrders (int BuyOrSell, double LotSize, double PriceToOpen, double Slippage, double SL_Price, double TP_Price, string comments, datetime ExpirationTime)

{

int PositionType, ticket, errorType;

if (BuyOrSell == LOOK_TO_BUY)

{

if (PriceToOpen > Ask)

{

PositionType = OP_BUYSTOP;

}

if (PriceToOpen < Ask)

{

PositionType = OP_BUYLIMIT;

}

Print("Bid: "+Bid+" Ask: "+Ask+" | Opening Buy Order: "+Symbol()+", "+PositionType+", "+LotSize+", "+PriceToOpen+", "+Slippage+", "+SL_Price+", "+TP_Price+", "+comments+", "+Magic_Number+", "+ExpirationTime+", Green");

ticket=OrderSend(Symbol(),PositionType,LotSize,PriceToOpen,Slippage,SL_Price,TP_Price,comments,Magic_Number,ExpirationTime,CLR_NONE);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

{

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

}

}

else

{

errorType = GetLastError();

Print("Error opening BUY order : ", ErrorDescription(errorType));

}

}

if (BuyOrSell == LOOK_TO_SELL)

{

if (PriceToOpen < Bid)

{

PositionType = OP_SELLSTOP;

}

if (PriceToOpen > Bid)

{

PositionType = OP_SELLLIMIT;

}

Print("Bid: "+Bid+" Ask: "+Ask+" | Opening Sell Order: "+Symbol()+", "+PositionType+", "+LotSize+", "+PriceToOpen+", "+Slippage+", "+SL_Price+", "+TP_Price+", "+comments+", "+Magic_Number+", "+ExpirationTime+", Red");

ticket=OrderSend(Symbol(),PositionType,LotSize,PriceToOpen,Slippage,SL_Price,TP_Price,comments,Magic_Number,ExpirationTime,CLR_NONE);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

{

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

}

}

else

{

errorType = GetLastError();

Print("Error opening SELL order : ", ErrorDescription(errorType));

}

}

}

void GetSpread()

{

if (UserDefinedSpread <= 0)

{

CustomSpread = MarketInfo(Symbol(),MODE_SPREAD);

}

else

{

CustomSpread = UserDefinedSpread;

}

}

int GetNumberOfPending()

{

int count = 0;

int total = OrdersTotal();

if (total > 0)

{

for(int cnt=0;cnt<total;cnt++)

{

if(OrderSelect(cnt,SELECT_BY_POS))

{

if(OrderSymbol()==Symbol() && OrderMagicNumber() == Magic_Number)

{

if(OrderType() != OP_BUY && OrderType() != OP_SELL)

{

ticketToDelete = OrderTicket();

count++;

}

}

}

}

}

return (count);

}

void ManageTrades()

{

// If there's only one pending trade left, assume the other one is opened.

// So Delete this one.

if (GetNumberOfPending() == 1)

{

if (OrderDelete(ticketToDelete))

{

KeepRunning = false;

Alert ("Straddle script has ended");

}

}

}

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

//| script program start function |

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

int start()

{

//----

GetSpread();

GetPrices();

PlaceTrades();

Alert ("Pending Trades Placed. Please Wait...");

int intervalMilliseconds = intervalseconds * 1000;

while (KeepRunning && OneCancelsOther)

{

Sleep(intervalMilliseconds);

ManageTrades();

}

//----

return(0);

}

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

 

предупреждение о нелагзигзаге

Привет, kevin07,

Спасибо за работу, которую вы проделали над этим индикатором. Возможно, во время кодирования советника у вас возникнет идея, как сделать так, чтобы сигналы появлялись в нужное время. В то же время, возможно, у кого-то другого здесь будет время решить эту проблему. Удачи с вашим советником.

С уважением,

Том

 

Пожалуйста, помогите мне добавить код matigale

Я только что создал этот советник, используя этот сайт: Expert Advisor Builder для MetaTrader 4, основанный на простых правилах торговли.

Вы можете попробовать этот советник, чтобы увидеть результат. Пожалуйста, установите SL = 100, TP = 300, трейлинг-стоп = 70 и запустите его на EUR/USD H4.

Будьте добры, помогите мне поставить мартигейл для торговли по этой системе:

Используйте такую сумму, чтобы 100 пунктов = 2% от баланса счета.

Если сделка n-1 проиграна, удвоить сумму сделки n до закрытия позиции с прибылью.

Большое спасибо!

Файлы:
 
vinafx:
Я только что создал этот советник, используя этот сайт: Expert Advisor Builder for MetaTrader 4, основываясь на простых правилах торговли.

Вы можете попробовать этот советник, чтобы увидеть результат. Пожалуйста, установите SL = 100, TP = 300, трейлинг стоп = 70 и запустите его на EUR/USD H4.

Будьте добры, помогите мне поставить мартигейл для торговли по этой системе:

Используйте такую сумму, чтобы 100 пунктов = 2% от баланса счета.

Если сделка n-1 проиграна, удвоить сумму сделки n до закрытия позиции с прибылью.

Большое спасибо!

Это стоит того, чтобы потратить немного времени, друзья! Вот результат торговли без кода мартигейла. Начальный депозит: 10000; 1 лот на сделку. SL = 100; TP = 300; Trailing ST: 70; EUR/USD H4.

Файлы:
 

как упростить этот код?

разница между a и b <= c тогда trade = true, иначе false...

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

if ( a >= b)

{

если (a - b <= c), то trade = true;

if (a - b > c) trade = false;

}

if ( a < b )

{

если (b - a <= c ) торговля = true;

если (b - a > c) торговля = false;

}

 

попробуйте следующее (я предполагаю, что c >= 0)

trade = (MathAbs(a-b) <= c);

с уважением

mladen

fercan:
как упростить этот код?

разница между a и b <= c тогда trade = true, иначе false...

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

if ( a >= b)

{

если (a - b <= c), то trade = true;

if (a - b > c) trade = false;

}

if ( a < b )

{

если (b - a <= c ) торговля = true;

если (b - a > c) trade = false;

}
 
mladen:
попробуйте это (я предполагаю, что c >= 0)
trade = (MathAbs(a-b) <= c);

с уважением,

mladen

спасибо. я искал что-то подобное раньше. спасибо.

 

тест сигналов NonLagZigZag_Signal_v2

tk748:
Здравствуйте, kevin07,

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

С уважением,

Том

Привет, Том,

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

Спасибо

kevin07

Файлы: