코딩하는 방법? - 페이지 267

 
christinaLi:
말씀하신 이 기능을 도와드리고 싶지만 단순히 귀하의 논리를 파악할 수 없는 것 같습니다. 이것은 전략의 다른 논리와 전혀 관련이 없습니다.

나는 단순히 이것을 알고 싶습니다.

1랏이 있는 경우 1.4110에서 매수하고 2랏을 1.4200에서 매도합니다. 6핍 이득을 얻을 수 있는 가격은 얼마입니까?

안녕 크리스티나

내 포지션 관리에서는 1번 매수가 2로트가 열리기 전에 이익으로 마감된다.

귀하의 예로 돌아가십시오.

그러나 약 1.4175에 선이 있습니다. 여기서 2개의 판매 로트(이익 증가, 시장 하락)와 1개의 구매 로트(이익 하락, 시장 하락)는 가격이 동일하므로(손익분기점 0), 1.4169에서 6핍 이익이 준비됩니다. 모든 주문을 닫을 것입니다

IX

 
ixbone:
안녕 크리스티나

내 포지션 관리에서는 1번 매수가 2로트가 열리기 전에 이익으로 마감된다.

귀하의 예로 돌아가십시오.

그러나 약 1.4175에 선이 있습니다. 여기서 2개의 판매 로트(이익 증가, 시장 하락)와 1개의 구매 로트(이익 하락, 시장 하락)는 가격이 동일하므로(손익분기점 0), 1.4169에서 6핍 이익이 준비됩니다. 모든 주문을 닫을 것입니다

IX

내 예는 1.4110과 1.4200이기 때문입니다. 내 계산은 다음과 같습니다.

우선, 1.4170(스프레드 미포함)에서 손익분기점입니다. 이제 우리는 각각 30핍에서 이득에 매도 2랏과 60핍 손실에 매수 1랏을 가지고 있으므로 달러 기준으로 손익분기점을 맞춥니다.

내 예와 정확히 일치하면 1.4164에서 전체적으로 6핍의 이득이 있어야 합니다.

1.4164(스프레드 고려하지 않음)에서 우리는 각각 36핍의 이득 매도 2랏과 54핍의 손실 매수 1랏을 가지고 있으므로 매도에서 72핍의 이익을 얻고 매수에서 54핍의 손실을 얻습니다. 거래 그룹에 대해 전반적으로 18핍의 이득을 가진 3개의 랏이 있습니다. 따라서 이제 6핍 이득이 있다고 생각하는 것이 더 합리적입니다.

그러나 스프레드 때문에 상황이 다시 복잡해질 것입니다. 입찰가가 1.4164인 경우 1.4166을 요구할 수 있으므로 판매 시 각각 34핍의 이득만 얻을 수 있습니다. 거래 그룹에 대해 전반적으로 14핍의 이득이 있는 3개의 랏이 있습니다. 이제 실제로 4.7핍 이득이 있습니다.

이 예를 한 단계 더 발전시키면 2개의 매수와 3개의 매도가 있습니다. 그런 다음 1.4164에서 손익분기점을 넘습니다.

스프레드를 고려할 필요가 없다면 각 로트에서 5핍의 이득을 얻으려면 30핍의 총 이득이 필요합니다. 따라서 6핍 이득은 1.4134의 가격이 됩니다. 이것이 맞습니까?

당신의 시스템은 아마 이런 상황이 없을 것입니다. 이것이 제가 얻고자 하는 원칙입니다. 위의 계산에 동의하십니까?

 
christinaLi:
내 예는 1.4110 및 1.4200이기 때문입니다. 내 계산은 다음과 같습니다.

우선, 1.4170(스프레드 미포함)에서 손익분기점입니다. 이제 우리는 각각 30핍에서 이득에 매도 2랏과 60핍 손실에 매수 1랏을 가지고 있으므로 달러 기준으로 손익분기점을 맞춥니다.

내 예와 정확히 일치하면 1.4164에서 전체적으로 6핍의 이득이 있어야 합니다.

1.4164(스프레드 고려하지 않음)에서 각각 36핍의 이득 매도 2랏과 54핍의 손실 매수 1랏이 있으므로 매도에서 72핍의 이득을 얻고 매수에서 54핍의 손실을 얻습니다. 거래 그룹에 대해 전반적으로 18핍의 이득을 가진 3개의 랏이 있습니다. 따라서 이제 6핍 이득이 있다고 생각하는 것이 더 합리적입니다.

그러나 스프레드 때문에 상황이 다시 복잡해질 것입니다. 입찰가가 1.4164인 경우 1.4166을 요구할 수 있으므로 판매 시 각각 34핍의 이득만 얻을 수 있습니다. 거래 그룹에 대해 전반적으로 14핍의 이득이 있는 3개의 랏이 있습니다. 이제 실제로 4.7핍 이득이 있습니다.

이 예를 한 단계 더 발전시키면 2개의 매수와 3개의 매도가 있습니다. 그런 다음 1.4164에서 손익분기점을 넘습니다.

스프레드를 고려할 필요가 없다면 각 로트에서 5핍의 이득을 얻으려면 30핍의 총 이득이 필요합니다. 따라서 6핍 이득은 1.4134의 가격이 됩니다. 이것이 맞습니까?

당신의 시스템은 아마 이런 상황이 없을 것입니다. 이것이 제가 얻고자 하는 원칙입니다. 위의 계산에 동의하십니까?

크리스티나,

동의합니다. 두 계산 모두 100% 맞습니다!

 

안녕, 마이클,

지난 며칠 동안 너무 바빠서 이미 완료했지만 정리하는 데 더 많은 시간이 필요합니다. 앞으로 며칠 안에 시간이 나면 여기에 게시할 것입니다. 크리시트나

 
 
christinaLi:
안녕, 마이클. 지난 며칠간 너무 바빠서 이미 완료했지만 정리하는 데 시간이 더 필요합니다. 앞으로 며칠 안에 시간이 나면 여기에 게시할 것입니다. 크리시트나

안녕 크리스티나,

문제 없습니다. 시간을 내십시오. 항상 귀하의 제안에 감사드립니다!

남자 이름

 
 

도움이 필요해

여러분, 안녕하세요 !

이것은 내 생각입니다. 분리 창에 2개의 표시기 버퍼 가 필요합니다. 1은 devupBuffer[]이고 2는 devdwBuffer[]입니다. 예를 들어 5개의 디지털 1,2,3,4,5가 있는 경우 평균은 3입니다. 그러면 데이터는 3 4 및 5의 평균보다 큽니다. devupBuffer={【(4-average)*(4-average)]+【 (5-평균)*(5-평균)]}/표준편차(1,2,3,4,5)*표준편차(1,2,3,4,5). 데이터가 평균 3보다 작음 1 및 2 devdwBuffer={【(1-평균)*(1-평균)]+【(2-평균)*(2-평균)]}/표준편차(1,2,3,4,5)*표준 편차(1,2,3,4,5).

 

왜 이 EA는 사거나 팔 수 없습니까?

안녕하세요, 저는 Meta로 이 프로그래밍을 처음 접했습니다... 도와주세요...

저는 25와 75의 두 가지 레벨을 가진 스토캐스틱 시스템으로 작업하고 있습니다...

하나의 무역 만 ...

MAIN과 SIGNAL이 모두 25 미만이고 교차하면 BUY.

MAIN과 SIGNAL이 25를 넘으면 CLOSE BUY.

MAIN과 SIGNAL이 모두 75 이상이고 교차하면 매도.

MAIN과 SIGNAL이 교차하는 경우(75 미만일 필요 없음), CLOSE SELL.

그게 다야...

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

//| StochCross.mq4 |

//| RobertEli |

//| http://www.metaquotes.net |

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

#property copyright "RobertEli"

#property link "http://www.metaquotes.net"

//--- input parameters

extern double TakeProfit=250.0;

extern double Lots=0.01;

extern double TrailingStop=35.0;

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

//| expert initialization function |

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

int init()

{

//----

//----

return(0);

}

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

//| expert deinitialization function |

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

int deinit()

{

//----

//----

return(0);

}

int Confirm (double line1, double line2, int level_buy, int level_sell)

{

static int confirmation = 0;

if ((line1 < level_buy) && (line2 < level_buy)) confirmation = 1; //confirm BUY, when two lines are below level_buy

if ((line1 > level_sell) && (line2 > level_sell)) confirmation = 2; //confirm SELL, when two lines are above level_sell

if ((line1 > level_buy) && (line2 > level_buy)) confirmation = 3; //confirm CLOSE BUY, when two lines are above level_buy

if ((line1 < level_sell) && (line2 < level_sell)) confirmation = 4; //confirm CLOSE SELL, when two lines are below level_sell

//if ((line1 > level_buy_close) && (line2 > level_buy_close)) confirmation = 3; //confirm CLOSE BUY

//if ((line1 < level_sell_close) && (line2 < level_sell_close)) confirmation = 4; //confirm CLOSE SELL

//else return (0);

return (confirmation);

}

int Crossed (double line1, double line2)

{

static int last_direction = 0;

static int current_direction = 0;

if (line1 > line2) current_direction = 1; //UP

if (line1 < line2) current_direction = 2; //DOWN

if (current_direction != last_direction) //changed direction

{

last_direction = current_direction;

return (last_direction);

}

else

{

return (0);

}

}

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

//| expert start function |

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

int start()

{

//----

int cnt, ticket;

double Stoch_main, Stoch_sign;

if (Bars < 100)

{

Print("BARS less than 100");

return (0);

}

if (TakeProfit < 10)

{

Print("TakeProfit less than 10");

return (0);

}

/*

Stoch_main = iStochastic (NULL,15,21,8,13,MODE_SMA,1,MODE_MAIN,0);

Stoch_sign = iStochastic (NULL,15,21,8,13,MODE_SMA,1,MODE_SIGNAL,0);

*/

Stoch_main = iStochastic (NULL,0,30,20,12,MODE_SMA,1,MODE_MAIN,0);

Stoch_sign = iStochastic (NULL,0,30,20,12,MODE_SMA,1,MODE_SIGNAL,0);

/*

Stoch_main = iMA(NULL,0,8,0,MODE_EMA,PRICE_CLOSE,0);

Stoch_sign = iMA(NULL,0,13,0,MODE_EMA,PRICE_CLOSE,0);

*/

int isCrossed = Crossed(Stoch_main,Stoch_sign);

int isConfirmed = Confirm(Stoch_main,Stoch_sign,25,75);

int total = OrdersTotal();

if (total == 0)

{

if ((isCrossed == 1) && (isConfirmed == 1))

{

ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"Buy at " + Ask,24848,0,Green);

if (ticket > 0)

{

if (OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY Order opened: " +Ask ,OrderOpenPrice());

else Print ("Error Opening BUY Order: ", GetLastError());

return (0);

}

}

if ((isCrossed == 2) && (isConfirmed == 2))

{

ticket = OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"Sell at " + Bid,24848,0,Red);

if (ticket > 0)

{

if (OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL Order opened: " +Bid ,OrderOpenPrice());

else Print ("Error Opening SELL Order: ", GetLastError());

return (0);

}

}

return (0);

}

else

{

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

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if (OrderType() <= OP_SELL && OrderSymbol() == Symbol())

{

if (OrderType() == OP_BUY) //the trade was a Buy position

{ //check for closing)

if ((isCrossed == 2) && (isConfirmed == 3))

//if (isCrossed == 2)

{ //change of direction

OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); //close Buy position

return (0);

}

}

else // the trade was a SELL position

{

//should it be closed?

//if ((isCrossed == 1) && (isConfirmed == 4))

if (isCrossed == 1) //Closing the SELL need not to be below the level_buy... it's very dangerous to wait for it...

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); //Sell position is now closed

return (0);

}

}

}

}

}

//----

return(0);

}

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

EA가 해야 할 일을 할 수 없습니다, 도와주세요!

안녕하세요, 저는 이 mq4 프로그래밍을 처음 접하지만 codersgurus 튜토리얼을 읽었습니다(정말 감사합니다!) 그래서 뭔가를 이해할 수 있을 것 같습니다... 하지만, MOVING AVERAGES를 기반으로 하는 이 EA를 만들었습니다. 하지만 원래대로 작동하지 않습니다!

여기 규칙은 매우 간단합니다 ...

1. MA_04_1H(1 시간 동안 이동 평균 주기 4를 의미)가 MA_14_1H를 교차하고,

MA_04_4H가 MA_14_4H보다 높은지 확인(추세는 상승) ------> BUY!

2. MA_04_1H가 MA_14_1H 아래로 교차하고,

MA_04_4H가 MA_14_4H(추세는 하향세)보다 낮은 것으로 확인 -----> SELL!

3. MA_04_1H가 MA_14_1H와 교차할 때 해당 주문을 닫습니다(규칙 #1 및 #2에 따라 새 주문을 시작할 수 있음).

4. 한 번의 거래만…

나는 두 가지 기능을 만들었습니다. 교차 및 확인.

교차는 1시간 동안입니다.

확인된 시간은 4시간입니다.

누구든지 내가 이것을 디버깅하는 데 도움을 줄 수 있습니까?

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

//| MACross1TradeOnly.mq4 |

//| RobertEli |

//| |

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

// this will work on MA_04, and MA__14

#property copyright "RobertEli"

#property link ""

extern double Lots = 0.01;

extern int stoploss_value = 10; // $10

bool up = 0, //UP direction, when MA_04 is above MA_14

down = 0, //DOWN direction, when MA_14 is above MA_04

change = 0, //when the MA_04 and MA_14 cross

firsttime = true; //first time for direction_prev

int direction_curr = 0; // 1 if UP, 2 if down...

int direction_prev = 0; // this will hold previous value of direction_curr

int direction_trend= 0; // trend direction for confirmation

int cross = 0; // if direction_curr and direction_prev changes course

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

//| expert initialization function |

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

int init()

{

//----

//----

return(0);

}

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

//| expert deinitialization function |

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

int deinit()

{

//----

//----

return(0);

}

int Crossed (double line1, double line2)

{

static int last_direction = 0;

static int current_direction = 0;

if (line1 - line2 > 0)//(line1 > line2)

{

current_direction = 1; //UP

if (firsttime == true)

{

current_direction = 0;

last_direction = 1;

firsttime = false;

return (0);

}

}

if (line1 - line2 < 0)//(line1 < line2)

{

current_direction = 2; //DOWN

if (firsttime == true)

{

current_direction = 0;

last_direction = 2;

firsttime = false;

return (0);

}

}

if ((current_direction != last_direction) && (firsttime == false)) //changed direction

{

last_direction = current_direction;

return (last_direction);

}

else

{

return (last_direction);

}

}

int Confirmed (double line1, double line2)

{

int trend;

if (line1 > line2) trend = 1; // trend direction is UP

if (line1 < line2) trend = 2; // trend direction is DOWN

return (trend);

}

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

//| expert start function |

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

int start()

{

//----

int cnt,ticket, total;

//double MA_04, MA_07 , MA_14 , MA_21 , MA_28; //MOVING AVERAGES with their corresponding period

if (Bars < 100) { Print ("Bars less than 100."); return (0); }

double MA_04_1H = iMA(NULL,60,04,0,MODE_EMA,PRICE_CLOSE,0);

double MA_14_1H = iMA(NULL,60,14,0,MODE_EMA,PRICE_CLOSE,0);

double MA_04_4H = iMA(NULL,240,04,0,MODE_EMA,PRICE_CLOSE,0);

double MA_14_4H = iMA(NULL,240,14,0,MODE_EMA,PRICE_CLOSE,0);

//double stoploss = stoploss_value / (Lots * 100000);

//new code from v_1

cross = Crossed (MA_04_1H,MA_14_1H); // =1 for UP, =2 for DOWN

direction_trend = Confirmed (MA_04_4H, MA_14_4H); // =1 for UP, =2 for DOWN

total = OrdersTotal();

if (total == 0)

{

if((cross == 1) && (direction_trend == 1))

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,/*Ask-stoploss*/0,0,"Buy at: "+ Ask,12345,0,Green);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice(),",<<<<",OrderStopLoss());

}

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

cross = 0;

return(0);

}

if((cross == 2) && (direction_trend == 2))

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,/*Bid+stoploss*/0,0,"Sell at: "+ Bid,12345,0,Red);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());

}

else Print("Error opening SELL order : ",GetLastError());

cross = 0;

return(0);

}

}

if (total == 1)

{

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

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

// bool no_buy_sell = ((OrderTakeProfit() 0));

if ((OrderType()==OP_BUY) && (cross == 2) )// && (no_buy_sell))

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position

//OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+stoploss,0,"Sell at: "+ Bid,12345,0,Red);

return (0);

}

else if ((OrderType()==OP_SELL) && (cross == 1) )// && (no_buy_sell))

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close position

//OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-stoploss,0,"Buy at: "+ Ask,12345,0,Green);

return (0);

}

}

}

else return (0);

//----

return(0);

}

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

내 이전 게시물을 무시하십시오... 나는 그 아이디어를 폐기했습니다... 지금 이 작업을 하고 있습니다... 그러니 제발 도와주세요...