커뮤니티
재문의
2019-06-18 13:39:36
272
글번호 129547
청산 식만 보내면 알 수가 없군요 ..
주로 매수 추적, 매수 손익 분기 등등 이런것으로 청산 하려 하는데
대부분 스탑스트레일잉 또는 스파이크 청산2로만 나오네요
뭐가 잘 못 되었을 까요 ?
input:최소변화폭(5);
var:j(0),벽돌크기(0),벽돌개수(0),방향(0),상승(1),하락(-1),Sum(0),CSum(0);
array:고[10](0),저[10](0),렌코[500](0);
if index == 0 then
{
벽돌크기 = 최소변화폭;
고[0] = C;
저[0] = C;
렌코[0] = C;
}
#==========================================#
# 렌코 계산
#==========================================#
if 방향 == 0 then
{
if 저[0] - 벽돌크기 >= C then
{
벽돌개수 = int((저[0]-C)/벽돌크기);
저[0] = 저[0] - 벽돌크기 * 벽돌개수;
방향 = 하락;
for j = 499 downto 벽돌개수
{
렌코[j] = 렌코[j-벽돌개수];
}
for j = 벽돌개수 - 1 downto 0
{
렌코[j] = 렌코[j+1] - 벽돌크기;
}
}
else if 고[0] + 벽돌크기 <= C then
{
벽돌개수 = int((C-고[0])/벽돌크기);
고[0] = 고[0] + 벽돌크기 * 벽돌개수;
방향 = 상승;
for j = 499 downto 벽돌개수
{
렌코[j] = 렌코[j-벽돌개수];
}
for j = 벽돌개수 - 1 downto 0
{
렌코[j] = 렌코[j+1] + 벽돌크기;
}
}
}
else if 방향 == 하락 then
{
if 저[0] - 벽돌크기 >= C then
{
벽돌개수 = int((저[0]-C)/벽돌크기);
저[0] = 저[0] - 벽돌크기 * 벽돌개수;
for j = 499 downto 벽돌개수
{
렌코[j] = 렌코[j-벽돌개수];
}
for j = 벽돌개수 - 1 downto 0
{
렌코[j] = 렌코[j+1] - 벽돌크기;
}
}
if 저[0] + 2*벽돌크기 <= C then
{
for j = 8 downto 0
{
고[j+1] = 고[j];
}
방향 = 상승;
벽돌개수 = int((C-저[0])/벽돌크기);
고[0] = 저[0] + 벽돌크기 * 벽돌개수;
for j = 499 downto (벽돌개수-1)
{
렌코[j] = 렌코[j-(벽돌개수-1)];
}
렌코[벽돌개수-2] = 렌코[벽돌개수-1] + 2*벽돌크기;
if 벽돌개수 > 2 then
{
for j = 벽돌개수 - 3 downto 0
{
렌코[j] = 렌코[j+1] + 벽돌크기;
}
}
}
}
else if 방향 == 상승 then
{
if 고[0] + 벽돌크기 <= C then
{
벽돌개수 = int((C-고[0])/벽돌크기);
고[0] = 고[0] + 벽돌크기 * 벽돌개수;
for j = 499 downto 벽돌개수
{
렌코[j] = 렌코[j-벽돌개수];
}
for j = 벽돌개수 - 1 downto 0
{
렌코[j] = 렌코[j+1] + 벽돌크기;
}
}
if 고[0] - 3*벽돌크기 >= C then
{
for j = 8 downto 0
{
저[j+1] = 저[j];
}
방향 = 하락;
벽돌개수 = int((고[0]-C)/벽돌크기);
저[0] = 고[0] - 벽돌크기 * 벽돌개수;
for j = 499 downto (벽돌개수-1)
{
렌코[j] = 렌코[j-(벽돌개수-1)];
}
렌코[벽돌개수-2] = 렌코[벽돌개수-1] - 2*벽돌크기;
if 벽돌개수 > 2 then
{
for j = 벽돌개수 - 3 downto 0
{
렌코[j] = 렌코[j+1] - 벽돌크기;
}
}
}
}
if 방향==상승 and 방향[1]==하락 then
Buy();
if 방향==하락 and 방향[1]==상승 then
Sell();
Input : BuyATRP(46),SellATRP(6),BuyATRS1(2.5),BuyATRS2(4.0),BuyATRS3(4.0),SellATRS1(3.5),SellATRS2(6.0),SellATRS3(6.0);
Input : BuyStoploss(12), SellStoploss(6), BuyTrailing(5), BuyFloor(20), SellTrailing(5),SellFloor(8.5);
Input:break(1.9),level(0.3),big(8),sbreak(1.9),slevel(0.3),sbig(8);
var:진입후최고가(0),진입후최저가(0);
If MarketPosition == 1 Then
{
진입후최고가 = Highest(H,BarsSinceEntry + 1);
ExitLong("매수추적",AtStop,진입후최고가 - ATR(BuyATRP) * BuyATRS1);
ExitLong("매수변동성",AtStop,C - ATR(BuyATRP) * BuyATRS2);
If 진입후최고가 >= Entryprice + ATR(BuyATRP) * break Then {
ExitLong("매수손익분기",AtStop,Entryprice + ATR(BuyATRP) * level);
ExitLong("매수추적1",AtStop,진입후최고가 - ATR(BuyATRP) * BuyATRS3);
}
If 진입후최고가 >= Entryprice + ATR(BuyATRP) * big Then
{
ExitLong("매수초과수익",AtStop,Lowest(L,3));
}
SetStopLoss(BuyStoploss, PointStop);
SetStopTrailing(BuyTrailing,BuyFloor,PointStop);
}
If MarketPosition == -1 Then {
진입후최저가 = Lowest(L,BarsSinceEntry + 1);
ExitShort("매도추적",AtStop,진입후최저가 + ATR(SellATRP) * SellATRS1);
ExitShort("매도변동성",AtStop,C + ATR(SellATRP) * SellATRS2);
If 진입후최저가 <= Entryprice - ATR(SellATRP) * sbreak Then {
ExitShort("매도손익분기",AtStop,Entryprice - ATR(SellATRP) * slevel);
ExitShort("매도추적1",AtStop,진입후최저가 + ATR(SellATRP) * SellATRS3);
}
If 진입후최저가 <= Entryprice - ATR(SellATRP) * sbig Then {
ExitShort("매도초과수익",AtStop,Highest(H,3));
}
SetStopLoss(SellStoploss, PointStop);
SetStopTrailing(SellTrailing,SellFloor,PointStop);
}
If MarketPosition == 0 Then { // 無포일 때 손절 설정을 clear 해야 만 오류가 안 생김
SetStopLoss(0, PointStop);
SetStopTrailing(0, 0, PointStop);
}
If MarketPosition == 1 Then
ExitLong("스파이크청산-1", AtLimit, C + ATR(20) * 7); // 상승돌파 시 매수청산
If MarketPosition == -1 Then
Exitshort("스파이크청산+1", AtLimit, C - ATR(20) * 7); // 상승돌파 시 매도청산
Var:SpikeHigh(0), spikelow(0);
If MarketPosition == 0 Then { // 무포지션일때
SpikeHigh = 10; // 초기화
Spikelow = 10; // 초기화
Condition1 = false;
}
If MarketPosition == 1 Then { // 매수포지션일 때
If !Condition1 and // 스파이크 미발생
H > C[1] + ATR(20) * 7 Then { // 전봉 종가보다 7 * ATR 이상 상승
SpikeHigh = H; // 스파이크 고점 설정
Condition1 = true; // 스파이크 발생
}
If Condition1 Then { // 스파이크 발생 후
If SpikeHigh < H then SpikeHigh = H; // 신규 고점 나오면 갱신
ExitLong("스파이크청산-2", AtStop, SpikeHigh - ATR(20) * 2);
//추적청산처럼 꼭지 찍고 내려올 때
}
}
If MarketPosition == -1 Then { // 매수포지션일 때
If !Condition1 and // 스파이크 미발생
L < C[1] + ATR(20) * 7 Then { // 전봉 종가보다 7 * ATR 이상 상승
SpikeHigh = L; // 스파이크 고점 설정
Condition1 = true; // 스파이크 발생
}
If Condition1 Then { // 스파이크 발생 후
If Spikelow > H then SpikeHigh = L; // 신규 고점 나오면 갱신
Exitshort("스파이크low청산-2", AtStop, Spikelow + ATR(20) * 2);
}
}
답변 1
예스스탁 예스스탁 답변
2019-06-19 10:13:27
안녕하세요
예스스탁입니다.
진입식은 저희가 간단한 내용을 추가해 보면 되므로 별도로 필요가 없습니다.
저희가 답변을 위해 필요한 부분은 청산식의 각 내용입니다.
해당 내용을 올려주셔야 의도하시는 내용과 맞지 않거나
잘못 작성된 부분을 수정해 드릴수 있습니다.
시스템은 여러 청산중에 먼저만족한것으로 청산신호가 발생하므로
여러개의 청산중에 특정 청산이 자주 발생하면 해당 청산의 조건이
다른 청산과는 다르게 자주 만족하는 조건이거나 혹은 의도와 다르게 작성된 부분입니다.
올려주신 청산식중에 다른 청산은 문제가 없어 보입니다.
스파이크라는 이름의 청산들만 수정해 드립니다.
초기화 시점과 매도청산은 매수청산과 반대로 작성하신것 같은데
내용이 반대가 아니어서 매수청산과 완전 반대되게 수정해 드립니다.
초기화값은 기존과 같이 10으로 지정했습니다.
Var:SpikeHigh(0), spikelow(0);
If MarketPosition == 1 Then // 매수포지션일 때
{
if MarketPosition != MarketPosition[1] Then
{
SpikeHigh = 10; // 초기화
Condition1 = false;
}
If Condition1 == false and // 스파이크 미발생
H > C[1] + ATR(20) * 7 Then // 전봉 종가보다 7 * ATR 이상 상승
{
SpikeHigh = H; // 스파이크 고점 설정
Condition1 = true; // 스파이크 발생
}
If Condition1 Then // 스파이크 발생 후
{
If SpikeHigh < H then
SpikeHigh = H; // 신규 고점 나오면 갱신
ExitLong("스파이크청산-2", AtStop, SpikeHigh - ATR(20) * 2);
//추적청산처럼 꼭지 찍고 내려올 때
}
}
If MarketPosition == -1 Then
{
if MarketPosition != MarketPosition[1] Then
{
Spikelow = 10; // 초기화
Condition2 = false;
}
If Condition2 == false and
L < C[1] - ATR(20) * 7 Then
{
Spikelow = H;
Condition2 = true;
}
If Condition2 Then
{
If Spikelow > L then
Spikelow = L; // 신규 고점 나오면 갱신
ExitShort("스파이크low청산-2", AtStop, Spikelow + ATR(20) * 2);
}
}
즐거운 하루되세요
> 구다이전설 님이 쓴 글입니다.
> 제목 : 재문의
> 청산 식만 보내면 알 수가 없군요 ..
주로 매수 추적, 매수 손익 분기 등등 이런것으로 청산 하려 하는데
대부분 스탑스트레일잉 또는 스파이크 청산2로만 나오네요
뭐가 잘 못 되었을 까요 ?
input:최소변화폭(5);
var:j(0),벽돌크기(0),벽돌개수(0),방향(0),상승(1),하락(-1),Sum(0),CSum(0);
array:고[10](0),저[10](0),렌코[500](0);
if index == 0 then
{
벽돌크기 = 최소변화폭;
고[0] = C;
저[0] = C;
렌코[0] = C;
}
#==========================================#
# 렌코 계산
#==========================================#
if 방향 == 0 then
{
if 저[0] - 벽돌크기 >= C then
{
벽돌개수 = int((저[0]-C)/벽돌크기);
저[0] = 저[0] - 벽돌크기 * 벽돌개수;
방향 = 하락;
for j = 499 downto 벽돌개수
{
렌코[j] = 렌코[j-벽돌개수];
}
for j = 벽돌개수 - 1 downto 0
{
렌코[j] = 렌코[j+1] - 벽돌크기;
}
}
else if 고[0] + 벽돌크기 <= C then
{
벽돌개수 = int((C-고[0])/벽돌크기);
고[0] = 고[0] + 벽돌크기 * 벽돌개수;
방향 = 상승;
for j = 499 downto 벽돌개수
{
렌코[j] = 렌코[j-벽돌개수];
}
for j = 벽돌개수 - 1 downto 0
{
렌코[j] = 렌코[j+1] + 벽돌크기;
}
}
}
else if 방향 == 하락 then
{
if 저[0] - 벽돌크기 >= C then
{
벽돌개수 = int((저[0]-C)/벽돌크기);
저[0] = 저[0] - 벽돌크기 * 벽돌개수;
for j = 499 downto 벽돌개수
{
렌코[j] = 렌코[j-벽돌개수];
}
for j = 벽돌개수 - 1 downto 0
{
렌코[j] = 렌코[j+1] - 벽돌크기;
}
}
if 저[0] + 2*벽돌크기 <= C then
{
for j = 8 downto 0
{
고[j+1] = 고[j];
}
방향 = 상승;
벽돌개수 = int((C-저[0])/벽돌크기);
고[0] = 저[0] + 벽돌크기 * 벽돌개수;
for j = 499 downto (벽돌개수-1)
{
렌코[j] = 렌코[j-(벽돌개수-1)];
}
렌코[벽돌개수-2] = 렌코[벽돌개수-1] + 2*벽돌크기;
if 벽돌개수 > 2 then
{
for j = 벽돌개수 - 3 downto 0
{
렌코[j] = 렌코[j+1] + 벽돌크기;
}
}
}
}
else if 방향 == 상승 then
{
if 고[0] + 벽돌크기 <= C then
{
벽돌개수 = int((C-고[0])/벽돌크기);
고[0] = 고[0] + 벽돌크기 * 벽돌개수;
for j = 499 downto 벽돌개수
{
렌코[j] = 렌코[j-벽돌개수];
}
for j = 벽돌개수 - 1 downto 0
{
렌코[j] = 렌코[j+1] + 벽돌크기;
}
}
if 고[0] - 3*벽돌크기 >= C then
{
for j = 8 downto 0
{
저[j+1] = 저[j];
}
방향 = 하락;
벽돌개수 = int((고[0]-C)/벽돌크기);
저[0] = 고[0] - 벽돌크기 * 벽돌개수;
for j = 499 downto (벽돌개수-1)
{
렌코[j] = 렌코[j-(벽돌개수-1)];
}
렌코[벽돌개수-2] = 렌코[벽돌개수-1] - 2*벽돌크기;
if 벽돌개수 > 2 then
{
for j = 벽돌개수 - 3 downto 0
{
렌코[j] = 렌코[j+1] - 벽돌크기;
}
}
}
}
if 방향==상승 and 방향[1]==하락 then
Buy();
if 방향==하락 and 방향[1]==상승 then
Sell();
Input : BuyATRP(46),SellATRP(6),BuyATRS1(2.5),BuyATRS2(4.0),BuyATRS3(4.0),SellATRS1(3.5),SellATRS2(6.0),SellATRS3(6.0);
Input : BuyStoploss(12), SellStoploss(6), BuyTrailing(5), BuyFloor(20), SellTrailing(5),SellFloor(8.5);
Input:break(1.9),level(0.3),big(8),sbreak(1.9),slevel(0.3),sbig(8);
var:진입후최고가(0),진입후최저가(0);
If MarketPosition == 1 Then
{
진입후최고가 = Highest(H,BarsSinceEntry + 1);
ExitLong("매수추적",AtStop,진입후최고가 - ATR(BuyATRP) * BuyATRS1);
ExitLong("매수변동성",AtStop,C - ATR(BuyATRP) * BuyATRS2);
If 진입후최고가 >= Entryprice + ATR(BuyATRP) * break Then {
ExitLong("매수손익분기",AtStop,Entryprice + ATR(BuyATRP) * level);
ExitLong("매수추적1",AtStop,진입후최고가 - ATR(BuyATRP) * BuyATRS3);
}
If 진입후최고가 >= Entryprice + ATR(BuyATRP) * big Then
{
ExitLong("매수초과수익",AtStop,Lowest(L,3));
}
SetStopLoss(BuyStoploss, PointStop);
SetStopTrailing(BuyTrailing,BuyFloor,PointStop);
}
If MarketPosition == -1 Then {
진입후최저가 = Lowest(L,BarsSinceEntry + 1);
ExitShort("매도추적",AtStop,진입후최저가 + ATR(SellATRP) * SellATRS1);
ExitShort("매도변동성",AtStop,C + ATR(SellATRP) * SellATRS2);
If 진입후최저가 <= Entryprice - ATR(SellATRP) * sbreak Then {
ExitShort("매도손익분기",AtStop,Entryprice - ATR(SellATRP) * slevel);
ExitShort("매도추적1",AtStop,진입후최저가 + ATR(SellATRP) * SellATRS3);
}
If 진입후최저가 <= Entryprice - ATR(SellATRP) * sbig Then {
ExitShort("매도초과수익",AtStop,Highest(H,3));
}
SetStopLoss(SellStoploss, PointStop);
SetStopTrailing(SellTrailing,SellFloor,PointStop);
}
If MarketPosition == 0 Then { // 無포일 때 손절 설정을 clear 해야 만 오류가 안 생김
SetStopLoss(0, PointStop);
SetStopTrailing(0, 0, PointStop);
}
If MarketPosition == 1 Then
ExitLong("스파이크청산-1", AtLimit, C + ATR(20) * 7); // 상승돌파 시 매수청산
If MarketPosition == -1 Then
Exitshort("스파이크청산+1", AtLimit, C - ATR(20) * 7); // 상승돌파 시 매도청산
Var:SpikeHigh(0), spikelow(0);
If MarketPosition == 0 Then { // 무포지션일때
SpikeHigh = 10; // 초기화
Spikelow = 10; // 초기화
Condition1 = false;
}
If MarketPosition == 1 Then { // 매수포지션일 때
If !Condition1 and // 스파이크 미발생
H > C[1] + ATR(20) * 7 Then { // 전봉 종가보다 7 * ATR 이상 상승
SpikeHigh = H; // 스파이크 고점 설정
Condition1 = true; // 스파이크 발생
}
If Condition1 Then { // 스파이크 발생 후
If SpikeHigh < H then SpikeHigh = H; // 신규 고점 나오면 갱신
ExitLong("스파이크청산-2", AtStop, SpikeHigh - ATR(20) * 2);
//추적청산처럼 꼭지 찍고 내려올 때
}
}
If MarketPosition == -1 Then { // 매수포지션일 때
If !Condition1 and // 스파이크 미발생
L < C[1] + ATR(20) * 7 Then { // 전봉 종가보다 7 * ATR 이상 상승
SpikeHigh = L; // 스파이크 고점 설정
Condition1 = true; // 스파이크 발생
}
If Condition1 Then { // 스파이크 발생 후
If Spikelow > H then SpikeHigh = L; // 신규 고점 나오면 갱신
Exitshort("스파이크low청산-2", AtStop, Spikelow + ATR(20) * 2);
}
}